2013-07-20 126 views
3

我遇到的情況,我不能夠繼續進行:硒的webdriver AJAX - 如何等待請求完成

我的頁面(這兩個按鈕都在同一幀)上的兩個按鈕。我使用Iterator作爲Button 1。當我們點擊Button 1時,它會進行AJAX調用。我看到一個鼠標加載動畫一秒鐘,然後將產品添加到購物車。

說,如果我有5個相同類型的按鈕&想單擊所有5個按鈕,當我使用迭代器單擊5個按鈕時,控件將從循環中而不是單擊第二個按鈕。

Iterator<WebElement> button1 = T2.iterator(); 
while(button1.hasNext()) { 
    button1.next().click(); 
    Thread.sleep(10000); 
} 

driver.findElement(By.id("button2 id")).click(); 

如果我使用Thread.sleep(),它工作正常。但我不想用它作爲不正確的方式。

button2 id也處於啓用狀態,我無法使用Wait for the element to be enabled。當執行到button1.next().click(),我,中間它會去下一行,沒有完成循環。如果我在button1.next().click()之後打印一些文本,文本會打印5次。但不知道爲什麼按鈕沒有被點擊。

即使試過隱含的等待,但沒有運氣。

避免此類問題的最佳方法是什麼?

回答

7

正確的方法是等待產品被添加到購物車。操作完成後頁面上的內容發生變化,對吧?所以請等待發生的變化!我不知道你的網頁,但顯然,但沿線:

// earlier 
import static org.openqa.selenium.support.ui.ExpectedConditions.*; 

// also earlier, if you want, but you can move it to the loop 
WebDriverWait wait = new WebDriverWait(driver, 10); 

Iterator<WebElement> button = T2.iterator(); 
while(button.hasNext()) { 
    // find the current number of products in the cart 
    String numberOfProductsInCart = driver.findElement(By.id("cartItems")).getText(); 
    button.next().click(); 
    // wait for the number of items in cart to change 
    wait.until(not(textToBePresentInElement(By.id("cartItems"), numberOfProductsInCart))); 
} 
+0

隨意問,如果有什麼不清楚。 –

+3

@VenkateshLakshmanan [如果這個答案被證明是有用和正確的,考慮接受它。這樣,未來的讀者會知道這個問題已得到解決,並且這個答案是正確的,並且是正確的。](http://meta.stackexchange.com/a/5235/184794) –

+0

感謝您的回覆。其解決。 –