我正在尝试使用selenium-webdriver、junit和ant构建来自动化测试用例。从早上开始我就有奇怪的错误。测试用例包含按钮单击命令。该测试在Chrome和FF上运行成功,但在IE上没有成功。早些时候,它至少说找不到元素X,但这一次说服务器没有提供任何信息。

测试用例:testMethod耗时10.342秒导致错误无法单击元素(警告:服务器未提供任何堆栈跟踪信息)命令持续时间或超时:172毫秒内部版本信息:版本:“2.23.1”,修订:“17143”,时间:“2012-06-08 18:59:04”系统信息:os.name:“Windows 7”,os.arch:“x86”,os.version:“6.1”,java.version:'1.6.0_33'驱动程序信息:Driver.version:RemoteWebDriver会话ID:8dfc5072-2755-40a7-bb32-05708c51101fcom.thinkworks.selenium。SeleniumException:无法单击元素(警告:服务器未提供任何堆栈跟踪信息)命令持续时间或超时:172毫秒内部版本信息:版本:“2.23.1”,修订:“17143”,时间:“2012-06-08 18:59:04”系统信息:os.name:“Windows 7”,os.arch:“x86”,os.version:“6.1”,java.version:“1.6.0_33”驱动程序信息:Driver.version:RemoteWebDriver会话ID:8dfc5072-2755-40a7-bb32-05708c51101f在org.openqa.selenium.internal.seleniumemulation上。SeleneseCommand.apply(SeleneseCommand.java:41)在org.openqa.selenium.internal.seleniumemulation上。Timer.run(Timer.java:38)在org.openqa.selenium上。WebDriverCommandProcessor.execute(WebDriverCommand Processor.java:144)在org.openqa.selenium上。WebDriverCommandProcessor.doCommand(WebDriverCommand处理器.java:74)在com.thoughtworks.selenium。DefaultSelenium.click(DefaultSelinium.java:193)在dmswebui。IE.TestLogin.testMethod(TestLogin.java:19)原因:org.openqa.selenium。ElementNotVisibleException:无法单击元素(警告:服务器未提供任何堆栈跟踪信息)命令持续时间或超时:172毫秒内部版本信息:版本:“2.23.1”,修订:“17143”,时间:“2012-06-08 18:59:04”系统信息:os.name:“Windows 7”,os.arch:“x86”,os.version:“6.1”,java.version:'1.6.0_33'驱动程序信息:Driver.version:RemoteWebDriver会话ID:8dfc5072-2755-40a7-bb32-05708c51101f位于java.lang.reflect。Constructor.newInstance(未知源)在org.openqa.selenium.remote上。ErrorHandler.createThrowable(错误处理程序.java:188)在org.openqa.selenium.remote上。ErrorHandler.throwIfResponseFailed(错误处理程序.java:145)在org.openqa.selenium.remote上。RemoteWebDriver.exexecute(RemoteWebDriver.java:458)在org.openqa.selenium.remote上。执行(RemoteWebElement.java:244)在org.openqa.selenium.remote上。RemoteWebElement.click(RemoteWebElement.java:77)在org.openqa.selenium.internal.seleniumemulation上。Click.handleSeleneseCommand(Click.java:36)在org.openqa.selenium.internal.seleniumemulation上。Click.handleSeleneseCommand(Click.java:1)在org.openqa.selenium.internal.seleniumemulation上。SeleneseCommand.apply(SeleneseCommand.java:32)
1
  • 1
    提供一个示例页面和示例代码,您可以在其中进行复制。另请查看WebDriverWait,以确保它不是时间问题。
    – 阿兰
    2012年6月16日11:26

4个答案4

重置为默认值
2

我注意到以下例外情况

原因:org.openqa.selenium。ElementNotVisibleException:无法单击元素

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

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

9
  • 一般情况下,您可以单击页面上的不可见元素。如果您认为,单击发生得太早,在元素可能会暴露其自身之前,您应该等待元素变得可见,然后再单击。使用标准Web驱动程序API没有其他方法可以解决这个问题。 2012年6月18日9:45
  • 您可以尝试使用JavascriptExecutor接口使用JavaScript执行单击操作,这肯定会奏效,因为您正在走出WebDriver沙箱,自己动手。那应该是你最后的选择。 2012年6月18日9:46
  • 如何等待元素?我们可以使用selenium IDE指定一些恒定的等待时间吗? 2012年6月18日16:50
  • 嘿,我用了一个变通方法。。。如果我在考虑中的页面上等待一些文本,它就会起作用。例如,在触发单击事件之前,我会执行waitForTextPresent,这会导致IE等待出现一些文本,然后再触发单击事件@阿什温:谢谢你的回答:) 2012年6月18日17:19
  • 5
    WebDriverWait wait=新WebDriverWait(webDriver,timeoutInMillis);wait.until(ExpectedConditions.visibilityOfElementLocated(By.id<locator>));或等待.until(ExpectedConditions.elementToBeClickable(By.id<locator>)); 2012年6月18日17:50
2

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

driver.navigation().refresh();

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

在我的经历中,我在Java项目中使用了最新的Web驱动程序(2.31.0)版本,并使用了IE 10(兼容模式内外)。

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

1

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

for(int second=0;;second++){如果(秒>=60)返回“页面加载失败”;尝试{if(session().isTextPresent(“注销”))断裂;} catch(异常e){}线程休眠(1000);}

在我的例子中,我有测试用例的超级类,这就是为什么我可以这样做

session().some命令

但是,您可以将我的解决方案转换为您的解决方案。

0
0

在我的例子中,问题是提交过程花费的时间太长,比如两分钟多,我的问题得到了解决,在try-catch上包装单击操作,并为过程添加睡眠,然后继续。代码如下

尝试{button.click();} 捕获(异常e){线程休眠(1000);}

您的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策

不是你想要的答案吗?浏览标记的其他问题问你自己的问题