0

我正在使用下面的一段代碼,以便硒驅動程序在進行任何進一步處理之前等待10秒鐘。但是頁面加載速度太快,並且似乎像增加或減少從10秒到20秒的時段沒有任何區別。我甚至將TimeUnit.SECONDS更改爲TimeUnit.MINUTES,但沒有區別。無法讓硒webdriver等待指定的時間

我缺少什麼?

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

CheckoutTest.java

@Test 
public void testCheckoutScenario() throws InterruptedException { 
    driver.get(WEBSTORE_BASE_URL); //hit the Home Page 
    assertEquals("Home Page", driver.getTitle().trim()); 

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

    //navigate to category page 
    driver.findElement(By.linkText("Gear")).click(); 
    assertEquals("Gear", driver.getTitle().trim()); 
    //navigate to subcategory page 
    driver.findElement(By.linkText("Watches")).click(); 
    assertEquals("Watches - Gear", driver.getTitle().trim()); 

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

    //some more code 
} 

我使用硒3.0,谷歌Chrome的webdriver和Java 8運行這個測試。

回答

1

您對Selenium隱式等待功能的理解不正確。
您聲明您正在使用隱式等待「以便硒進程在進行任何進一步處理之前等待10秒」。

隱式等待不會延遲處理,而是設置selenium WebDriver將等待的時間量爲作爲最大值,用於執行等待的任何操作。 「點擊()」方法沒有實現期待,所以當你執行你的代碼,它會執行行:
assertEquals("Gear", driver.getTitle().trim());
但失敗,因爲它仍然可以看到在網頁「主頁」的斷言之前執行該頁面已經移動。

考慮以下列方式使用顯式等待重寫代碼: -
WebElement myDynamicElement = (new WebDriverWait(driver, 10)) .until(ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement")));

哪裏myDynamicElement是你希望導航到(等待)頁面上的定位。

爲了讓代碼更具可讀性,您應該考慮創建一個類來使用try-catch塊正確地實現定時器。

要了解更多信息,您應該考慮註冊免費的Selenium新手訓練營,地址爲The Selenium Handbook。在第4天覆蓋等待。

1

有一種方法,使硒等待,直到你的DOM被加載:

WebDriver driver = new FirefoxDriver(); 
driver.get("http://somedomain/url_that_delays_loading"); 
WebElement myDynamicElement = (new WebDriverWait(driver, 10)) 
    .until(ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement"))); 

你可以看到這個例子中的文檔,here

就你而言,你需要等到新頁面上的DOM加載。

0

使用Thread.sleep()而不是implicitlyWait()。看樣品

driver.get(WEBSTORE_BASE_URL); 
assertEquals("Home Page", driver.getTitle().trim()); 
Thread.sleep(10000); //Thread default time unit is millisecond 
0

隱含的等待給了最大的等待時間。但是在等待結束之前它會運行下一行。所以嘗試使用WebDriverWait類來正確等待,直到指定的條件。

WebDriverWait wait = new WebDriverWait(driver, 20); 
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By 
       .className("session"))); 

如果你不想指定條件使用Thread.sleep();