2017-09-13 23 views
-3

Firefoxにバージョン52にアップデートした後、geckoドライバをv17にアップデートする必要がありました。しかし、私の以前のすべてのスクリプトはFirefoxで失敗します。速すぎて読み込むページの要素を払っていないからです。Selenium - FireFox/Marionetteドライバが制御が速すぎる

これで、クリックごとにThread.sleepの待機を強制的に追加するようになりました。あなたが私に助けてくれる解決策はありますか?

Chromeでうまく動作しますが、どちらも同じように動作する必要があります。

私はTestNGのを実行して、私が手に例外がある:情報の構築:バージョン:「3.4.0」、改正:「不明」、時間:「不明」

は、私があるのThread.sleepをinstertingことによってそれを固定推奨されていませんが、これは動作する唯一のものです。流暢待機は仕事をdidnotか、私は

1505314327534 geckodriverプロファイルパスCを使用して127.0.0.1:42753 1505314328131 mozprofile ::プロフィールINFOに聞くINFO:\ユーザー\のAppData \ローカル\一時\のrust_mozprofile.NX5A3KOOQr 1505314328136 geckodriver ::マリオネットINFO開始ブラウザC:/プログラムファイル/ Mozilla Firefoxの/ firefox.exeを持つ引数[]ローカルホスト上のマリオネットへの接続 1505314328150 geckodriver ::マリオネットINFO:65331 1505314331570マリオネット情報では、ポート上の目的の65331

+1

[要素がSeleniumに存在するまで待機する方法は?](https://stackoverflow.com/questions/20903231/how-to-wait-until-an-element- – JeffC

+0

@ JeffC - おそらく、あなたはその質問を理解していないでしょう。ユーザーは、以前のバージョンでは実行されていたが、更新されたバージョンでは実行されていなかったスクリプトは、速すぎてより良い解決策を求めていると言っています。私が間違っていれば私を修正してください。 – Kapil

+2

@Kapil OPは、クリックするたびに追加する必要があると言いました。それを処理するより良い方法は、重複する質問で参照される 'WebDriverWait'を使うことです。ここでは、適切な待機を使用する以外の解決策が必要な固有のものはありません。ドライバー/ブラウザーが高速の場合は、スクリプトをできるだけ速くします。睡眠はすべて遅くなり、ベストプラクティスではありません。 – JeffC

答えて

0

一つ聞きますテストの自動化は、Test Executionの時間を短縮することです。だから、Firefoxのドライバ、すなわちMarionetteを使用するgeckodriverの方が速く動作すれば、私たちはうれしくなるはずです。あなたの質問はgeckodriverとリアルタイムのMozilla Firefox Browserをどのように同期させるべきかということです。

  1. Thread.sleep(n)の追加についてご質問いただきました。遅く誘導するThread.sleep(n)は、ベストプラクティスの一環ではありません。パフォーマンスが低下します。他の利用可能なオプションを見てみましょう。
  2. 次は、not waiting for element on the page to loadについてお話しました。これは、WebDriverを使用している間に直面する共通の問題です。これに対処する最も簡単な方法は、ImplicitWaitを誘導することです。要約すると、ImplicitWaitを導入することにより、ドライバーは要素または要素を探すために設定された時間量の間、HTML DOMをポーリングします。その時までにあなたが探していた要素は、HTML DOMで利用可能かもしれません。

    • パイソン

      driver.implicitly_wait(10) 
      
    • ジャワを次のようImplicitWaitの例は、

      driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
      

ここにofficial documentationがあり、detailed stackoverflow discussionがあります。

  1. ImplicitWaitは、テスト実行を非常に遅くする可能性があります。だからその場合ExplicitWait私たちの救助に来る。要するに、ExplicitWaitは、コードの次の行に進む前に特定の条件が満たされるのを待つWebDriverインスタンス用に定義、構成、実装するコードブロックです。

    • パイソン

      password = WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.XPATH, "your_xpath"))) 
      password.send_keys("your_password") 
      
    • ジャワ

      WebDriverWait wait = new WebDriverWait(driver, 20); 
      WebElement password = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("your_xpath"))); 
      password.sendKeys("your_password"); 
      
012を次のように ExplicitWaitの例であります

official documentation hereがあり、detailed stackoverflow discussionが見つかりました。

0

Chromeでうまく動作しますが、どちらも同じように動作する必要があります。

私はTestNGのを実行して、私が手に例外がある:情報の構築:バージョン:「3.4.0」、改正:「不明」、時間:「不明」

は、私があるのThread.sleepをinstertingことによってそれを固定推奨されていませんが、これは動作する唯一のものです。流暢な待ち時間はありませんでした

関連する問題