java - 替代 thread.sleep() - amazon selenium webdriver 添加到购物车忽略保险对话框
问题描述
我试图避免使用 Thread.sleep() 但没有它,保险对话框上的“不,谢谢”按钮不会被点击
脚步:
- 在 amazon.com 上搜索产品
- 点击产品标题
- 在产品详细信息上单击添加到购物车
- 单击购买保险对话框上的不,谢谢按钮
- 项目被添加到购物车。
我试过以下替换 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();
}
尝试隐式等待
解决方案
避免将预先声明的 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);
推荐阅读
- java - 为什么获取无法呈现请求的错误页面?
- python - 从 Pandas Dataframe 和 Numpy 数组中提取基于条件的子集
- jakarta-ee - 在 EJB 3.1 中从无状态 Bean(已经有 REQUIRED)调用的方法中添加 @TransactionAttribute(REQUIRED_NEW) 是否有效?
- excel-formula - 使用“IFERROR”函数时将值绘制为“1”
- node.js - 带有 knex 的“TypeError:无法读取未定义的属性 'id'”的问题
- c - Valgrind:大小为1的无效读取
- javascript - 不和谐音乐机器人 js
- java - 如何使用 Selenium 在 iframe 中切换到 html
- python - Python cv2.VideoCapture 与 face_recognition 库崩溃
- java - 如何从流利的接口方法返回相同的模拟