Selenium没有单击菜单元素,即使它在那里

时间:2014-01-09 18:21:41

标签: internet-explorer user-interface selenium automation

我正在尝试自动化一个场景,我将鼠标悬停在一个元素上,然后单击该子菜单中的另一个元素。我正在使用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();

2 个答案:

答案 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问题。