【问题标题】:How to update the List of Webelements on the page?如何更新页面上的 Webelements 列表?
【发布时间】:2020-05-12 08:40:58
【问题描述】:

如题——如何正确刷新“productList”,最终在目录中找到具体的产品?

即使产品本身在页面上可见,此方法也会一直点击“显示下一个产品”按钮。这意味着“productList”尚未刷新。

   public void findProductAndAddToCart()  {

        //searching for products by className
        List<WebElement> productList = SeleniumDriver.getDriver().findElements(By.className("bcom--txtBold"));

    for (int i = 0; i < productList.size(); i++) {
        //getting the numbers of the products
        String element = productList.get(i).getText();

        if (element.equals("7000029644")) {
            productList.get(i).isDisplayed();
            System.out.println("Product is displayed");
            SeleniumDriver.getDriver().findElement(By.xpath("XPATH - Add to Cart Button')]")).click();
            break;

        } else {

            //the product hasn't been found, so need to click "Show Next Products"
            SeleniumDriver.getDriver().findElement(By.xpath("//a[contains(.,'Show Next')]")).click();
            List<WebElement> newProductList = SeleniumDriver.getDriver().findElements(By.className("bcom--txtBold"));
            productList.addAll(newProductList);


        }

【问题讨论】:

  • 如果我没看错,您的意思是说您在控制台中看不到“产品已显示”吗?而是执行到 else 语句?
  • 是的,完全正确。它一直在搜索..
  • 能否分享一下网址,我们也可以试试
  • 我希望我能。这是需要凭据的内部公司网站的测试环境,我无法透露;//
  • 我已经添加了。 1) 产品编号 2) 显示下一个按钮 3) 添加到购物车按钮

标签: java selenium selenium-webdriver automated-tests functional-testing


【解决方案1】:

你可以试试这样的

public void findProductAndAddToCart() {

    boolean flag = true;

    while (flag) {
      flag = isNextEnabled();

      //searching for products by className
      List<WebElement> productList = SeleniumDriver.getDriver()
          .findElements(By.className("bcom--txtBold"));

      for (WebElement e : productList) {

        //getting the numbers of the products
        String element = e.getText();

        if (element.equals("7000029644")) {
          e.isDisplayed();
          System.out.println("Product is displayed");
          SeleniumDriver.getDriver().findElement(By.xpath("XPATH1')]")).click();
          flag = false;
          break;

        } else {
          //don't click next here
          }
      }
          SeleniumDriver.getDriver().findElement(By.xpath("//a[contains(.,'Show 
   Next')]")).click();
    }
  }

  private boolean isNextEnabled() {
    return SeleniumDriver.getDriver()
        .findElements(By.xpath("//a[contains(.,'Show Next')]")).isEnabled;
  } 

【讨论】:

  • 嗨。感谢您的想法,但是即使产品在目录中可见,它也会一直单击“显示下一个按钮”。;/
  • 如果您将 productList 打印到控制台,您看到的是您正在寻找的产品吗?
  • 产品在显示的页面上不可见,因为我需要点击“显示下一个...”。当它在第一页时,没有问题。问题是元素的每次迭代 - 驱动程序单击按钮。因此,如果我想找到位于第 14 位的产品 - 驱动程序单击按钮 14 次,这不是必需的,因为我只需要单击一次,因为产品在显示的第 2 页上。
  • 你能试试我贴的代码吗?它将首先遍历第一页中的所有元素,如果没有找到,则单击下一步按钮。因此,在单击下一步按钮后,在列表迭代期间应该找到您的产品。所以基本上我发布的代码将不断重复迭代列表并单击下一步,直到找到产品或没有更多的下一个
  • 我对控制台的输出进行了截图并在上面进行了更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多