2017-04-06 1 views
2

他にも上記の問題がありますか? geckodriverが暗黙的にも明示的にも待機するようには見えません。それだけで私はのThread.sleepを使用するときに動作します()ここでJava Selenium 3.3.1およびgeckodriver 0.15.0ウィンドウで待機していない10

chromedriverで自分のコードベース全体で正常に動作します私の明示的な方法である:私も暗黙の呼び出しを使用する必要がないよ

public void waitForPageLoad(WebDriver driver) throws MyTestException { 
    try { new WebDriverWait(driver, page_timeout).until((ExpectedCondition<Boolean>) wd -> 
     ((JavascriptExecutor) wd).executeScript("return document.readyState").equals("complete")); 
     } catch (Exception e){logger.warning("Waiting for page load failed.");} 
} 

が。

私の初期の暗黙の待機であるgeckoドライバのinitコードです。

else if (config.useFirefox()) { 

      String geckoDriverLocation = config.getProperty("qa.webdriverpath") + "geckodriver.exe"; 
      System.setProperty("webdriver.gecko.driver", geckoDriverLocation); 
      driver = new FirefoxDriver(); 
      driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
      //DesiredCapabilities dc = DesiredCapabilities.firefox(); 
     } 

スリープを使用せずに、ログイン要素がいっぱいになるのを待っていません。 例:

WebElement emailText = test.getDriver().findElement(By.name("email")); 
    WebElement passText = test.getDriver().findElement(By.name("password")); 
    WebElement loginButton = test.getDriver().findElement(By.xpath("//input[@type='submit']")); 
    test.getLogger().info("Logging in as user " + user.contact.getName() + " (" + user.getEmail() + ")..."); 
    emailText.clear(); 
    emailText.click(); 
    emailText.sendKeys(user.getEmail()); 
    emailText.sendKeys(Keys.TAB); 

    passText.clear(); 
    passText.sendKeys(user.getPassword()); 
    passText.sendKeys(Keys.TAB); 

    loginButton.click(); 

    //try{Thread.sleep(3000);}catch(Exception e){} 
    test.waitForPageLoad(test.getDriver()); 

ガイダンスが評価されました。

+0

これで、geckodriverを使用している場合、NoSuchElementExceptionが表示されますか?それとも暗黙の待ち時間がどういうものかはどうやって決めますか? –

答えて

0

暗黙の待機はgeckodriverでは正常ですが、ページのロードタイムアウトはgeckodriverでは機能しません。これはgeckdriverのバグであり、発生しました。だからレガシーファイヤーフォックスドライバーを使用してください、それはかなりうまくいきます。

ページタイムアウトは機能しません。ボタンをクリックするとページが完全に読み込まれるのを待たず、クリック直後にコントロールが解除されます。あなたは3.3.0 webdriverをセレンを使用する場合は、geckodriverが非アクティブgeckodriverへので、デフォルトの1である(これは、レガシーFirefoxのドライバを駆動することができます最後のバージョンです)

を火狐47.0.2をインストールし

、あなただけのパラメータマリオネットを作ります偽!

これは、Javaに対応するものを見つけてください、私は偽

caps = Selenium::WebDriver::Remote::Capabilities.firefox(marionette: false) 

にマリオネットを作るために結合Rubyのセレンでの使用方法です。

+0

私はそれを試みると、ええ、私はクラッシュの無限のスタックトレースを取得します。私はfirefox 52です。基本的にthatsドライバが見つかりませんでした。 – Miek

1

セレン3.3.1、geckodriver 0.15.0、およびFirefox 52.0.2で同じ問題が発生しています。暗黙の待機が機能していません。回避策は、睡眠を追加し続けることですが、それは悪いです。私はこのバグがすでに発生しているのを発見しましたhttps://github.com/mozilla/geckodriver/issues/308

+0

私は約45日前にmac上でgeckodirver .14.0でセレニウム3.1を使用していましたが、うまくいきました(ウェブページを閉じることはできませんでしたが)。今何が起きているのか分かりません。私は実際にそれで多くのエラーに遭遇しています。 – Miek

関連する問題