21

PHPUnit_SeleniumOperaに問題があります。テスト コードで要素をクリックすると、ページが読み込まれません。Firefox、IE、Chrome、Safari などの他のブラウザでは、正しく動作します。

コード:

$browser->clickAndWait(link);

SLENIUM REMOTE CONTROL の次のステップです。

click(link)
waitForPageToLoad(120000)

タイムアウト後、ブラウザでリンクをクリックすると、ページがリロードされます。

私は Selenium RC v. 2.31.0 と Opera バージョン 12.41 を持っていますが、Opera 11.50 でもテストしています。

何が悪いのか分かりますか?

4

4 に答える 4

1

私はFFでもこの問題を抱えていましたが、これが私が思いついた解決策でした:

def wait_for_element_by_id(eid):
   "Wait for an element to be present"
   element = WebDriverWait(driver, 10).until(
       EC.presence_of_element_located((By.ID, eid))
   )
   return []
于 2016-09-16T21:10:06.677 に答える
0

私は同様の問題を抱えていましたが、残念ながら、私が思いついた唯一の解決策は...「スリープ」を追加することでした。醜いが、動作します。

于 2014-12-24T12:40:37.723 に答える
0

元の投稿には決定的な解決策を提案するのに十分な情報がありませんでしたが、@Andre が提供したコメントと結び付けて、「サニタイズ」ブラウザーが行い、「Copy xPath」などの機能を提供することは非常に誤解を招く可能性があります。 xPath の構造によっては、テスト中に多くの問題が発生します。

例えば:

<html>
    <head></head>
    <body>
        <div>
            <table>
                <tr>
                    <td>test</td>
                </tr>
                <tr>
                    <td>value</td>
                </tr>
            </table>
        </div>
    </body>
</html>

上記のコードは非常に最小限ですが、ブラウザーは test の xPath を次のいずれかとして報告します。

  • /html/body/div/table/tr/td (多くの場合、 test と value の両方が返されます)
  • /html/body/div/table/tr[1]/td[1] (テストするためのより正確な一致)
  • /html/body/div/table/tbody/tr/td (追加された tbody に注意してください)

等々。明らかに、利用可能なより一意の識別子 (IE an id -> //*[@id="someElement"] ) を使用してこの問題に遭遇することはありませんが、多くのプロジェクトでは、ユニット テストが行​​われた場所を引き継いでいます。当初は 1 つのブラウザーでのみ実行されていましたが、報告されたものと同様のエラーが発生し、「サニタイズ」ブラウザーが次の 2 つの問題のいずれかを引き起こすことが判明しました。

  • パスは「サニタイズ」されたブラウザーで取得され、要素が見つからないブラウザーで実行されました。
  • パスは「サニタイズ」されていないブラウザで取得され、サニタイズされたブラウザで実行されました。

両方の問題により、不一致が発生します。

于 2013-05-01T21:06:35.003 に答える