4

セレンWebドライバー、junit、antビルドを使用してテストケースを自動化しようとしています。朝から変なエラーが出ています。テストケースには、ボタンクリックコマンドが含まれています。テストはChromeとFFで成功しますが、IEでは成功しません。以前は、少なくとも一部の要素Xが見つからないと言っていましたが、これはサーバーが情報を提供しなかったことを示しています。

Testcase: testMethod took 10.342 sec
    Caused an ERROR
Cannot click on element (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 172 milliseconds
Build info: version: '2.23.1', revision: '17143', time: '2012-06-08 18:59:04'
System info: os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_33'
Driver info: driver.version: RemoteWebDriver
Session ID: 8dfc5072-2755-40a7-bb32-05708c51101f
com.thoughtworks.selenium.SeleniumException: Cannot click on element (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 172 milliseconds
Build info: version: '2.23.1', revision: '17143', time: '2012-06-08 18:59:04'
System info: os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_33'
Driver info: driver.version: RemoteWebDriver
Session ID: 8dfc5072-2755-40a7-bb32-05708c51101f
    at org.openqa.selenium.internal.seleniumemulation.SeleneseCommand.apply(SeleneseCommand.java:41)
    at org.openqa.selenium.internal.seleniumemulation.Timer.run(Timer.java:38)
    at org.openqa.selenium.WebDriverCommandProcessor.execute(WebDriverCommandProcessor.java:144)
    at org.openqa.selenium.WebDriverCommandProcessor.doCommand(WebDriverCommandProcessor.java:74)
    at com.thoughtworks.selenium.DefaultSelenium.click(DefaultSelenium.java:193)
    at dmswebui.IE.TestLogin.testMethod(TestLogin.java:19)
Caused by: org.openqa.selenium.ElementNotVisibleException: Cannot click on element (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 172 milliseconds
Build info: version: '2.23.1', revision: '17143', time: '2012-06-08 18:59:04'
System info: os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_33'
Driver info: driver.version: RemoteWebDriver
Session ID: 8dfc5072-2755-40a7-bb32-05708c51101f
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:188)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:458)
    at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:244)
    at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:77)
    at org.openqa.selenium.internal.seleniumemulation.Click.handleSeleneseCommand(Click.java:36)
    at org.openqa.selenium.internal.seleniumemulation.Click.handleSeleneseCommand(Click.java:1)
    at org.openqa.selenium.internal.seleniumemulation.SeleneseCommand.apply(SeleneseCommand.java:32)
4

4 に答える 4

4

例外として次のことに気づきました

Caused by: org.openqa.selenium.ElementNotVisibleException: Cannot click on element

これは通常、クリックしている要素がページ内で隠されているか非表示になっている場合に発生します。WebDriverはネイティブイベントを使用するため、非表示のWebElementでアクションを実行するように要求すると失敗します。

Selenium RCは合成イベント(JSイベント)をデプロイし、可視性に関係なく任意のDOM要素のクリックをシミュレートできるため、これは問題ではありませんでした。

于 2012-06-16T15:24:53.520 に答える
2

Internet Explorer では、少なくとも最新のバージョン 10 およびそれ以前の 9 では、DOM が動的に作成されるシングルページ アプリまたは重い ajax ページで、DOM が完全にリロードされないか、WebDriver に表示されません。今のところ回避策は、単にページを更新することです

driver.navigate().refresh();

これはハックのように思えるかもしれませんが、IE ブラウザにページを再読み込みさせ、現在期待されている DOM 要素を描画させます。WebDriverWait を挿入しても役に立ちませんでした (ただし、これはベスト プラクティスであり、ajax を多用するアプリを操作する場合、ほとんどすべての場合に実装する必要があります)。

私の経験では、Java プロジェクトと IE 10 (互換モードの内外で) 内で最新の webdriver (2.31.0) バージョンを使用していました。

IEがこれを行う理由を理解したら、この回答をより長期的な移植可能なソリューションに更新してから、ページを更新します。とりあえず、Chrome Driver を使用して、IE に Chrome Frame を実装することにしました。

于 2013-03-22T05:47:50.137 に答える
1

クリックイベントを発生させる前に次のブロックを挿入します

for (int second = 0;; second++) {
    if (second >= 60) return "Page load failed";
    try {
        if (session().isTextPresent("Logoff")) 
            break;
    } 
    catch (Exception e) {}
    Thread.sleep(1000);
}

私の場合、テストケースのスーパークラスがあるので、できるのです

session().somecommand

しかし、私の解決策をあなたの解決策に翻訳することができます。

于 2012-06-18T17:26:01.967 に答える
0

私の場合、問題は送信プロセスに2分以上かかるなど、時間がかかりすぎることでした。問題は解決され、try catchでクリックアクションをラップし、プロセスが終了するまでスリープを追加してから続行しました。次のようなコード

try {
        button.click();
    } 
    catch (Exception e) 
{
    Thread.sleep(1000);
}
于 2015-06-19T16:17:08.020 に答える