4

我正在尝试使用 selenium webdriver、junit 和 ant build 自动化测试用例。从早上开始,我就遇到了奇怪的错误。一个测试用例包含按钮单击命令。测试在 Chrome 和 FF 上运行成功,但在 IE 上运行失败。之前,至少是说无法找到某些元素 X,但是这个说服务器没有提供任何信息。

Testcase: testMethod took 10.342 sec
    Caused an ERROR
Cannot click on element (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 172 milliseconds
Build info: version: '2.23.1', revision: '17143', time: '2012-06-08 18:59:04'
System info: os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_33'
Driver info: driver.version: RemoteWebDriver
Session ID: 8dfc5072-2755-40a7-bb32-05708c51101f
com.thoughtworks.selenium.SeleniumException: Cannot click on element (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 172 milliseconds
Build info: version: '2.23.1', revision: '17143', time: '2012-06-08 18:59:04'
System info: os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_33'
Driver info: driver.version: RemoteWebDriver
Session ID: 8dfc5072-2755-40a7-bb32-05708c51101f
    at org.openqa.selenium.internal.seleniumemulation.SeleneseCommand.apply(SeleneseCommand.java:41)
    at org.openqa.selenium.internal.seleniumemulation.Timer.run(Timer.java:38)
    at org.openqa.selenium.WebDriverCommandProcessor.execute(WebDriverCommandProcessor.java:144)
    at org.openqa.selenium.WebDriverCommandProcessor.doCommand(WebDriverCommandProcessor.java:74)
    at com.thoughtworks.selenium.DefaultSelenium.click(DefaultSelenium.java:193)
    at dmswebui.IE.TestLogin.testMethod(TestLogin.java:19)
Caused by: org.openqa.selenium.ElementNotVisibleException: Cannot click on element (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 172 milliseconds
Build info: version: '2.23.1', revision: '17143', time: '2012-06-08 18:59:04'
System info: os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_33'
Driver info: driver.version: RemoteWebDriver
Session ID: 8dfc5072-2755-40a7-bb32-05708c51101f
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:188)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:458)
    at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:244)
    at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:77)
    at org.openqa.selenium.internal.seleniumemulation.Click.handleSeleneseCommand(Click.java:36)
    at org.openqa.selenium.internal.seleniumemulation.Click.handleSeleneseCommand(Click.java:1)
    at org.openqa.selenium.internal.seleniumemulation.SeleneseCommand.apply(SeleneseCommand.java:32)
4

4 回答 4

4

我在异常中注意到以下内容

Caused by: org.openqa.selenium.ElementNotVisibleException: Cannot click on element

这通常发生在您单击的元素在页面中被遮挡或隐藏时。WebDriver 使用本机事件,因此每当您要求它对隐藏的 WebElement 执行操作时都会失败。

这在 Selenium RC 中不是问题,因为它部署了合成事件(JS 事件)并且可以模拟对任何 DOM 元素的点击,而不管其可见性如何。

于 2012-06-16T15:24:53.520 回答
2

在 Internet Explorer 中,至少在最新版本 10 和之前的 9 中,DOM 无法在单页应用程序或动态创建 DOM 的重型 ajax 页面中完全重新加载或对 WebDriver 可见。我现在找到一种解决方法是简单地刷新页面

driver.navigate().refresh();

我意识到这可能看起来像一个 hack,但它确实会强制 IE 浏览器重新加载页面并绘制当前预期的 DOM 元素。即使插入 WebDriverWait 也无济于事(尽管这是最佳实践,并且在使用 ajax 繁重的应用程序时应在大多数情况下实施)。

在我的经验中,我在 Java 项目和 IE 10(进出兼容模式)中使用了最新的 webdriver (2.31.0) 版本。

一旦我弄清楚为什么 IE 会这样做,我会将此答案更新为更长期的可移植解决方案,然后只需刷新页面即可。现在,我继续使用 Chrome 驱动程序并在 IE 中实现 Chrome 框架。

于 2013-03-22T05:47:50.137 回答
1

在触发点击事件之前插入以下块

for (int second = 0;; second++) {
    if (second >= 60) return "Page load failed";
    try {
        if (session().isTextPresent("Logoff")) 
            break;
    } 
    catch (Exception e) {}
    Thread.sleep(1000);
}

就我而言,我有测试用例的超级类,这就是我能做到的原因

session().somecommand

但是,您可以将我的解决方案翻译成您的解决方案。

于 2012-06-18T17:26:01.967 回答
0

在我的情况下,问题是提交过程花费的时间太长,比如超过两分钟,我的问题已解决,将点击操作包装在 try catch 上并添加睡眠以完成该过程,然后继续。代码如下

try {
        button.click();
    } 
    catch (Exception e) 
{
    Thread.sleep(1000);
}
于 2015-06-19T16:17:08.020 回答