2017-09-13 56 views
-3

更新到Firefox到版本52後,我不得不將gecko驅動程序更新到v17。但是我之前的所有腳本在Firefox中都失敗了,因爲它太快而且沒有爲頁面上的元素加載。我現在不得不爲每次點擊添加Thread.sleep等待。有什麼解決方案可以幫助我嗎?Selenium - FireFox/Marionette驅動程序太快無法控制

在Chrome中運行得更好,但需要同時工作。

我TestNG的運行和例外,我得到的是:建立信息:版本:「3.4.0」,修訂版:「未知」,時間:「未知」

我通過insterting了Thread.sleep這是固定的,不推薦,但這是唯一可行的。流利的等待因此未工作或我

1505314327534 geckodriver信息上偵聽127.0.0.1:42753 1505314328131 mozprofile ::資料信息使用配置文件路徑C:\用戶\應用程序數據\本地的\ Temp \ rust_mozprofile.NX5A3KOOQr 1505314328136 geckodriver ::提線木偶INFO啓動瀏覽器C:/ Program Files文件/ Mozilla Firefox瀏覽器/ firefox.exe與ARGS [] 1505314328150 geckodriver ::木偶信息連接到木偶在localhost:65331 1505314331570木偶信息偵聽端口65331

+1

可能重複的[如何等到一個元素存在於硒?](https://stackoverflow.com/questions/20903231/how-to-wait-until-an-element-現在在硒) – JeffC

+0

@JeffC - 可能,你不明白這個問題。用戶說,腳本用於運行在以前的版本,但不是更新的版本,因爲它太快,並要求更好的解決方案。如果我錯了,請糾正我。 – Kapil

+2

@Kapil OP表示他們不得不在每次點擊之前添加睡眠。處理該問題的更好方法是使用在重複問題中引用的「WebDriverWait」。我沒有看到任何獨特的東西需要一個解決方案,而不是使用適當的等待。如果驅動程序/瀏覽器速度很快,則希望腳本儘可能快。睡眠讓所有的東西都慢下來,並不是最佳實踐。 – JeffC

回答

0

一個客觀的測試自動化將縮短Test Execution時間。因此,如果Firefox的驅動程序,即使用Marionettegeckodriver行爲更快,它應該讓我們感到高興。現在您的問題必須是如何將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中可用。的ImplicitWait一個例子如下:

    • 的Python

      driver.implicitly_wait(10) 
      
    • 爪哇

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

您可以在這裏找到official documentation,並在這裏找到一個detailed stackoverflow discussion

  • ImplicitWait可以很顯着減慢你的測試執行。所以在這種情況下ExplicitWait來到我們的救援。簡而言之,ExplicitWait是一個代碼塊,您可以爲WebDriver實例定義,配置和實現以在繼續執行下一行代碼之前等待某個條件滿足。的ExplicitWait一個例子如下:

    • 的Python

      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"); 
      
  • 您可以在此找到official documentation here並找到detailed stackoverflow discussion

    0

    在Chrome中運行得更好,但需要同時工作。

    我TestNG的運行和例外,我得到的是:建立信息:版本:「3.4.0」,修訂版:「未知」,時間:「未知」

    我通過insterting了Thread.sleep這是固定的,不推薦,但這是唯一可行的。流利的等待沒有工作或我

    相關問題