首页 > 解决方案 > 替代 thread.sleep() - amazon selenium webdriver 添加到购物车忽略保险对话框

问题描述

我试图避免使用 Thread.sleep() 但没有它,保险对话框上的“不,谢谢”按钮不会被点击

脚步:

  1. 在 amazon.com 上搜索产品
  2. 点击产品标题
  3. 在产品详细信息上单击添加到购物车
  4. 单击购买保险对话框上的不,谢谢按钮
  5. 项目被添加到购物车。

我试过以下替换 thread.sleep();

driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
driver.manage().timeouts().pageLoadTimeout(5, TimeUnit.SECONDS);

wait.until(ExpectedConditions.elementToBeClickable(By.id("add-to-cart-button"))).click();
 try {
         Thread.sleep(2000);
            if (insurancePopUpDialog.isDisplayed()) {

                    wait.until(ExpectedConditions.elementToBeClickable(insuranceNoThanksButton));

                  new Actions(driver).moveToElement(insuranceNoThanksButton).click().build().perform(); 
                  wait.until(ExpectedConditions.or(
                            ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"huc-v2-order-row-items-msg\"]")),
                            ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"huc-v2-order-row-confirm-text\"]")),
                            ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"attachDisplayAddBaseAlert\"]/div/h4"))

                    )); 
              }
        }   catch (Exception e) {
                  e.printStackTrace();
                }   

尝试隐式等待

标签: javaselenium-webdriverwebdriverwait

解决方案


避免将预先声明的 WebElement 传递给 ExpectedConditions 函数,因为它应该可以随时用于浏览器上的 WebDriver。在 if 条件下尝试以下内容:-

wait.until(ExpectedConditions.elementToBeClickable(By.xpath(<xpath for weblement insuranceNoThanksButton >)));

稍后,您可以声明 WebElement insuranceNoThanksButton 以进行进一步操作。

如果上述方法不起作用,请尝试使用 javascript click:-

((JavascriptExecutor)driver).executeScript("arguments[0].click();", insuranceNoThanksButton);

推荐阅读