奇怪的问题 - cssSelector无法使用css结构找到对象

时间:2012-08-30 16:16:32

标签: css-selectors selenium-webdriver

使用带有webdriver的cssSelector定位元素时,我遇到了一个奇怪的问题。

在我在Windows上设置的新环境中,当使用CSS结构进行标识时,cssSelector无法找到对象 - 例如findElement(By.cssSelector(elementId > div(1) > span(1)))

如果仅通过ID findElement(By.cssSelector(elementId))完成,则识别工作正常。

我们在任何地方都使用WebDriverWait,所以这不是时间问题。实际上,它甚至没有等待指定的间隔。它在几毫秒内退出,其错误类似于底部给出的堆栈跟踪。

相同的代码在所有新的Linux环境和旧的Windows环境中运行良好。我到处都遵循相同的环境设置步骤。

  1. 获取Eclipse Java EE Helios SR2
  2. 从'帮助>中安装Maven安装新软件选项 - http://m2eclipse.sonatype.org/sites/m2e
  3. 从'帮助>设置TestNG安装新软件选项 - http://beust.com/eclipse
  4. 在eclipse.ini
  5. 中设置-vm参数
  6. 将我的项目导入eclipse - 因此相同的maven版本,TestNG版本等随处可见。
  7. 知道为什么会在我现在正在设置的所有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)

1 个答案:

答案 0 :(得分:0)

而不是

(elementId > div(1) > span(1))

尝试使用

elementId>div:first-child>span:first-child

你有没有检查过,例如在firepath中你的元素是否已正确定位?