3

我有一个无法继续进行的情况:

我在页面上有两个按钮(两个按钮都在同一个框架中)。我正在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,立即进入下一行,没有完成循环。如果我在 之后打印一些文本button1.next().click(),则文本会打印 5 次。但不知道为什么没有点击按钮。

甚至尝试过隐式等待,但没有运气。

避免此类问题的最佳方法是什么?

4

1 回答 1

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)));
}
于 2013-07-20T08:23:09.357 回答