使用带有webdriver的cssSelector
定位元素时,我遇到了一个奇怪的问题。
在我在Windows上设置的新环境中,当使用CSS结构进行标识时,cssSelector无法找到对象 - 例如findElement(By.cssSelector(elementId > div(1) > span(1)))
。
如果仅通过ID findElement(By.cssSelector(elementId))
完成,则识别工作正常。
我们在任何地方都使用WebDriverWait
,所以这不是时间问题。实际上,它甚至没有等待指定的间隔。它在几毫秒内退出,其错误类似于底部给出的堆栈跟踪。
相同的代码在所有新的Linux环境和旧的Windows环境中运行良好。我到处都遵循相同的环境设置步骤。
知道为什么会在我现在正在设置的所有Windows环境中发生这种情况吗?
堆叠跟踪样本
org.openqa.selenium.WebDriverException:无法找到元素 css selector == #GraphicalPane> div:nth-of-type(1)> div:nth-of-type(1)> img(警告:服务器没有提供任何服务 stacktrace information)命令持续时间或超时: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(本机方法) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 在 org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:170) 在 org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:123) 在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:439) 在 org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:226) 在 org.openqa.selenium.remote.RemoteWebDriver.findElementByCssSelector(RemoteWebDriver.java:291) 在org.openqa.selenium.By $ ByCssSelector.findElement(By.java:406)at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:218) at my.domain.product.webconsole.Hardware $ 10.apply(Hardware.java:589) at 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) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在java.lang.reflect.Method.invoke(Method.java:597)at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80) 在org.testng.internal.Invoker.invokeMethod(Invoker.java:714)at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)at at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)at at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127) 在 org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111) 在org.testng.TestRunner.privateRun(TestRunner.java:767)at org.testng.TestRunner.run(TestRunner.java:617)at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)at at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)at at org.testng.SuiteRunner.run(SuiteRunner.java:240)at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)at org.testng.TestNG.runSuitesSequentially(TestNG.java:1197)at at org.testng.TestNG.runSuitesLocally(TestNG.java:1122)at at org.testng.TestNG.run(TestNG.java:1030)at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)at at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204)at at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)
答案 0 :(得分:0)
而不是
(elementId > div(1) > span(1))
尝试使用
elementId>div:first-child>span:first-child
你有没有检查过,例如在firepath中你的元素是否已正确定位?