4

私はセレングリッドを使用しています(FF13、FF16、IE9、およびクロムの4つのブラウザーでテストを実行します。各ブラウザーは異なるマシン上にあります。テストの関連セクションで、クリック可能な要素を見つけてクリックします。FF13、IE9およびchrome それはうまく動作します: 要素が見つかり、クリックされました. FF16 では、要素が見つかり、webdriver はそれをクリックしたことを「主張」しますが、ボタンのアクション (ページ上のテーブルのレイアウトを変更します) はしません。起こりません。

注: 私はバージョン 2.25 を使用しています。ありがとう、Tizki

4

2 に答える 2

2

うーん... jsインジェクションのようなチートを使用します(jQueryのサポートが含まれている場合)。例えば

String cssSelector="...blablabla....";
    JavascriptExecutor js = (JavascriptExecutor) driver;
    StringBuilder stringBuilder = new StringBuilder();
    stringBuilder.append("var x=$(\'"+cssSelector+"\');");
    stringBuilder.append("x.click()");
    js.executeScript(stringBuilder.toString());

2番目のアプローチ(解決策): DOMモデルを使用してクリックする要素を見つけようとしますdocument.getElementsByTagName -これにより、見つかった要素の配列が返され、Firefoxのコマンドラインを使用して必要な要素を簡単に見つけることができます. だからあなたの要素は次のようになります:

document.getElementsByTagName[n]  

どこで n - 見つかった配列内の要素の順序document.getElementsByTagName

document.getElementsByTagName以下のメソッドのコードは、パラメーター tagName - 要素を検索するタグの名前であり、argNum は、 n - 要素の順序を取得するために配列の全長から減算する必要がある数値です。

public void jsDirectClickUsingDOM_GEBTagName(String tagName,int argNum) throws IOException {
        JavascriptExecutor js = (JavascriptExecutor) driver;
        StringBuilder stringBuilder = new StringBuilder();
 stringBuilder.append("document.getElementsByTagName(\'"+tagName+"\')[document.getElementsByTagName(\'"+tagName+"\').length-"+argNum+"].click()");
        js.executeScript(stringBuilder.toString());
    }

これはとにかく動作するはずです。それがあなたにとって明確になることを願っています:)

于 2012-11-19T09:38:03.653 に答える
0

webdriverとの相性に問題があると思いますFF16FF 13.0.1同じ理由で立ち往生しています。ところで、Firefox と webdriver の間の互換性のマトリックスを見つけることができませんでしたが、さまざまなバージョンの Firefox で何度もテストを実行しようとした後、実際に機能するものに固執することにしました。

于 2012-11-19T11:50:25.813 に答える