2

いくつかの Web アプリケーションの自動テストの作成に取り組んでいます。このアプリケーションは非常に複雑です。実際には、特定のコンテンツ用のテキスト エディターです。機能の一部として、いくつかのポップアップ フレームがあります。このポップアップを開いてもよろしいですか? いくつかの変更を加えて保存し、現在のフレームを閉じます。5月の問題は、フレームの内側にある閉じるボタンがなくなることです。これにより、Chrome WebDriver が強制的にハングします。私の最初の試みは次のようなものでした:

    driver.findElement(By.xpath("//input[@id='insert']")).click();
    driver.switchTo().defaultContent();

しかし、このコマンドはフレームを閉じるため、クリックコマンドを実行した後、最初の行でハングします。次に、これに変更します(ページにJQueryがあります):

    driver.executeScript("$(\"input#insert\").click()");
    driver.switchTo().defaultContent();

しかし、これは同じ結果につながります。次に、このソリューションを使用します。

    driver.executeScript("setTimeout(function(){$(\"input#insert\").click()}, 10)");
    driver.switchTo().defaultContent();

そして、それは2行目にハングアップします。このソリューションのみが機能します:

    driver.executeScript("setTimeout(function(){$(\"input#insert\").click()}, 100)");
    driver.switchTo().defaultContent();

ただし、これが不安定であることを考慮しない場合に限ります。タイミングの問題が発生する可能性があります。

では、クローズド フレームから切り替えるための、よりクリーンで安定した方法があるのではないかと疑問に思われるかもしれません。

PS: executeScript - コード量を減らすための自己定義関数。ページ上でいくつかのjsを実行するだけです。

アップデート:

私は自分が間違っていることに気づきました。この問題は、すべての iframe に当てはまるわけではありません。tinyMCE popup を使用した場合に発生します。状況はこのトピックとまったく同じです。したがって、ここで答えが見つかるかどうかは疑わしいですが、誰にもわかりません。上記の解決策は役に立ちますが、非常に短い時間だけです。つまり、数秒後に chromedriver が次のコマンドでハングします。

4

2 に答える 2

0

問題は tinyMCEPopup コードの次の行にありました:

   DOM.setAttrib(id + '_ifr', 'src', 'javascript:""'); // Prevent leak

ページでこのスクリプトを実行すると、ハングの問題が修正されます (ただし、リークが発生する可能性があります:)):

(function() {
var domVar;
if (window.tinymce && window.tinymce.DOM) {
    domVar = window.tinymce.DOM 
}
else if (window.tinyMCE && window.tinyMCE.DOM) {
    domVar = window.tinyMCE.DOM 
}
else {
    return;
}
var tempVar = domVar.setAttrib;console.log(123)
domVar.setAttrib = function(id, attr, val) {
    if (attr == 'src' && typeof(val)== 'string' &&(val + "").trim().match(/javascript\s*:\s*("\s*"|'\s*')/)) {
        console.log("Cool");
        return;
    }
    else {
        tempVar.apply(this, arguments);
    }
}

}());

バグと解決策もここに記載されています 。上記のコードは、ポップアップ フレームではなく、親フレームに追加する必要があります。

于 2012-08-08T10:13:52.213 に答える