0

cssSelectorwebdriverを使用して要素を検索するときに、奇妙な問題に直面しています。

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 で -vm 引数を設定します。
  5. プロジェクトを 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: sun.reflect.NativeConstructorAccessorImpl.newInstance0 の RemoteWebDriver(ネイティブ メソッド) java.org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:170) の lang.reflect.Constructor.newInstance(Constructor.java:513) 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 org.openqa.selenium.By$ByCssSelector.findElement(By.java:406) で .findElementByCssSelector(RemoteWebDriver.java:291) domain.product.webconsole.Hardware$10.apply(Hardware.java:589) at my.domain.product.webconsole.Hardware$10.apply(Hardware.java:1) at 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) で.reflect.NativeMethodAccessorImpl.invoke0(ネイティブ メソッド)、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)。org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111) での invokeTestMethods(TestMethodWorker.java:127) org.testng.TestRunner.privateRun(TestRunner.java:767) で 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) org.testng.TestNG.runSuitesLocally(TestNG.java:1122) org.testng.TestNG.run(TestNG.java:1030) org.testng.remote.RemoteTestNG.run (RemoteTestNG.java:111) org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204) で org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175) で

4

1 に答える 1

0

それ以外の

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

使ってみて

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

要素が適切に配置されているかどうか、たとえばファイアパスで確認しましたか?

于 2012-09-06T15:56:08.157 に答える