cssSelector
使用webdriver定位元素时,我遇到了一个奇怪的问题。
在我在 Windows 上设置的新环境中,当使用 CSS 的结构完成识别时,cssSelector 无法找到对象——例如findElement(By.cssSelector(elementId > div(1) > span(1)))
.
如果仅通过 id 完成识别,则可以正常工作 - findElement(By.cssSelector(elementId))
。
我们WebDriverWait
到处都在使用,所以这不是时间问题。事实上,它甚至没有等待指定的时间间隔。它在几毫秒内退出,错误类似于底部给出的堆栈跟踪。
相同的代码在所有新的 Linux 环境和我的旧 Windows 环境上运行良好。我到处都遵循相同的环境设置步骤。
- 获取 Eclipse Java EE Helios SR2
- 从“帮助 > 安装新软件”选项安装 Maven – http://m2eclipse.sonatype.org/sites/m2e
- 从“帮助 > 安装新软件”选项设置 TestNG – http://beust.com/eclipse
- 在 eclipse.ini 中设置 -vm 参数
- 将我的项目导入到 eclipse 中——因此,相同的 maven 版本、TestNG 版本等在任何地方都被指定。
知道为什么在我现在设置的所有 Windows 环境中都会发生这种情况吗?
堆栈跟踪示例
org.openqa.selenium.WebDriverException: Unable to find element with css selector == #GraphicalPane > div:nth-of-type(1) > div:nth-of-type(1) > img (警告:服务器没有提供任何堆栈跟踪信息)命令持续时间或超时:344 毫秒构建信息:版本:'2.19.0',修订:'15848',时间:'2012-02-08 16:25:03' 系统信息:os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_25' 驱动程序信息: driver.version: RemoteWebDriver at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 在 java.org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:170) 在 org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java: 123) 在 org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:226) 在 org.openqa.selenium.remote.RemoteWebDriver 的 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:439) .findElementByCssSelector(RemoteWebDriver.java:291) 在 org.openqa.selenium.By$ByCssSelector.findElement(By.java:406) 在 org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:218) 在我的。 domain.product.webconsole.Hardware$10.apply(Hardware.java:589) 在 my.domain.product.webconsole.Hardware$10.apply(Hardware.java:1) 在 org.openqa.selenium.support。ui.FluentWait.until(FluentWait.java:201) 在 my.domain.product.webconsole.Hardware.findobject1(Hardware.java:587) 在 my.domain.product.testsuite.testcase1(HardwareApplianceRack.java:48) 在 sun .reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke (Method.java:597) 在 org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80) 在 org.testng.internal.Invoker.invokeMethod(Invoker.java:714) 在 org.testng.internal.Invoker。在 org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231) 在 org.testng.internal.TestMethodWorker 的 invokeTestMethod(Invoker.java:901)。invokeTestMethods(TestMethodWorker.java:127) at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111) at org.testng.TestRunner.privateRun(TestRunner.java:767) at org.testng.TestRunner.run(TestRunner .java:617) 在 org.testng.SuiteRunner.runTest(SuiteRunner.java:334) 在 org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329) 在 org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)在 org.testng.SuiteRunner.run(SuiteRunner.java:240) 在 org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) 在 org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) 在 org.testng。 TestNG.runSuitesSequentially(TestNG.java:1197) at org.testng.TestNG.runSuitesLocally(TestNG.java:1122) at org.testng.TestNG.run(TestNG.java:1030) at org.testng.remote.RemoteTestNG.run (远程测试NG.java:111) 在 org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204) 在 org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)