前端做了同时出现标签最大数量的限制,标签随着选项滚动而变化,导致难以选中想要的元素
可以考虑我写的代码,除了封装了一下selenium思路还是一样的
// 通用菜单
public void menuSelect(String menuName) throws Exception {
elementOperate.moveToElement(menuPage.queryMenu());
Thread.sleep(1000);
elementOperate.click(menuPage.queryMenuSendKeys());
Thread.sleep(500);
elementOperate.sendKeys(menuPage.queryMenuSendKeys(), menuName);
elementOperate.clickDirectionKey("down", 1);
List<String> listMenuName = new ArrayList<>();
// 读取第一个元素name
String name = elementOperate.getAttribute(menuPage.getMenuList_1(), "name");
listMenuName.add(name);
// 按5下鼠标下键读取第二个元素
elementOperate.clickDirectionKey("down", 5);
name = elementOperate.getAttribute(menuPage.getMenuList_1(), "name");
// 对比第二个元素和第一个元素name是否一样
if (name.equals(listMenuName.get(0))) {
// 一样说明一共不足6个元素 则读取全部五个元素存入数列
try {
listMenuName.add(elementOperate.getAttribute(menuPage.getMenuList_2(), "name"));
listMenuName.add(elementOperate.getAttribute(menuPage.getMenuList_3(), "name"));
listMenuName.add(elementOperate.getAttribute(menuPage.getMenuList_4(), "name"));
listMenuName.add(elementOperate.getAttribute(menuPage.getMenuList_5(), "name"));
} catch (Exception e) {
}
elementOperate.clickDirectionKey("up", 5);//回到第一个位置
} else {
// 不一样说明大于五个元素
// 此时将第二个元素存入数列
listMenuName.add(name);
// 继续按下键,读取后续元素存入数列,并判断按下键后读取的第一个div的name是否和第一个数列元素一样,如果一样说明已经重新开始了。用循环
while (true) {
elementOperate.clickDirectionKey("down", 1);
name = elementOperate.getAttribute(menuPage.getMenuList_1(), "name");
if (name.equals(listMenuName.get(0))) {
// 此时按一下上键,来到列表最后一栏,读取最后四个元素即可
elementOperate.clickDirectionKey("up", 1);
listMenuName.add(elementOperate.getAttribute(menuPage.getMenuList_2(), "name"));
listMenuName.add(elementOperate.getAttribute(menuPage.getMenuList_3(), "name"));
listMenuName.add(elementOperate.getAttribute(menuPage.getMenuList_4(), "name"));
listMenuName.add(elementOperate.getAttribute(menuPage.getMenuList_5(), "name"));
break;
} else {
listMenuName.add(name);
}
}
elementOperate.clickDirectionKey("down", 1);//回到第一个位置
}
System.out.println(listMenuName.toString());
// 取出数列中对应name的索引
for (String s : listMenuName) {
if (s.equals(menuName)) {
Thread.sleep(50);
elementOperate.clickEnter();
break;
}
elementOperate.clickDirectionKey("down", 1);
}
}