我正在尝试自动化一个场景,我将鼠标悬停在一个元素上,然后单击该子菜单中的另一个元素。我正在使用CSS选择器并为IE webdriver进行测试。
我们的软件提供4种不同的语言进行导航。我的代码适用于所有3个,但1除外。因此,代码是通用的,并且不会因任何一种语言而改变。 CSS选择器是相同的,它可以提供4种语言中的3种。我测试了20次,3种语言通过100%失败=总是失败。
当我对失败的那个element.getText() =
时,我可以看到我正确的元素。文本是应该的。当我做element.click()
时,我无处可去。
我尝试action.moveToElement.click()
,双击它。它适用于其他3种语言,但不适用于失败的语言。所以我非常肯定我的代码还可以。如果我手动执行它没有问题,我只能使用IE驱动程序看到它。
我如何解决它:
作为解决方法,我正在读取元素的位置,然后使用java.Robot将实际鼠标移动到我的子菜单项并单击它。现在它有效,但我仍然想知道为什么我遇到这个问题。
还有其他人经历过这个吗?
我真的不喜欢我的解决方案,因为如果在第二台显示器上打开IE浏览器并且我的X和Y位置与主显示器相关,我现在无法进行测试。
我也喜欢添加html,但它非常复杂,而且页面将其视为html并且不会显示它。
我在那里的代码:
element = wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("span[widgetid=\"app_schedulesAndPlanningApp\"].dijit.dijitReset.dijitButton")));
action.moveToElement(element, 1, 1).perform();
try {
robot = new Robot();
element = driver.findElement(By.cssSelector("div.appSubMenu ul li.subApp:nth-child(4)"));
location = element.getLocation();
robot.mouseMove(location.getX() + 20, location.getY() + 80);
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
}
你看到Robot我以前做过element.click();
答案 0 :(得分:1)
我的经验是.click()方法并不总是可靠的。您可以尝试设置一个重新尝试.click()操作的方法,直到它真正起作用。这对我有用。
答案 1 :(得分:-1)
我在使用IE webdriver时遇到了类似的问题。我的代码在firefox上用于下拉列表但在IE事件上失败,尽管webdriver指向了正确的元素。
我的解决方案是在点击下拉菜单后使用Thread.Sleep(100);
进行一些等待。这样的事情。
Click on Menu or dorpdown box element
Thread.sleep(100); //in milliseconds
Click on dropdown element form menu or dorpdown
希望这能解决您的IE问题。