我的情况是我无法继续前进:
页面上有两个按钮(两个按钮位于同一个框架中)。我正在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()
时,i,mediately它将进入下一行,而不完成循环。如果我在button1.next().click()
之后打印一些文本,则会打印5次文本。但不知道为什么按钮没有被点击。
甚至试过隐含的等待,但没有运气。
避免此类问题的最佳方法是什么?
答案 0 :(得分: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)));
}