java - Selenium 无法找到具有 data-testid 属性的元素
问题描述
试图找到以下元素尝试了以下没有任何效果的任何人都可以提供帮助。
<button data-testid="addToClientBasket"
class="sc-kfGgVZ kcCRfu">
<span><i class="icon-Expand_Cross_30_by_30"></i>Add To Basket</span>
</button>
By.xpath("//button[@data-testid='addToClientBasket'");
By.xpath("//div[@id='root']/div/div/div/div[4]/div/div/div[2]/button/span";
By.cssSelector("button.sc-kfGgVZ.kcCRfu.added");
By.cssSelector("button.sc-kfGgVZ.kcCR");
By.cssSelector("button[class='sc-kfGgVZ kcCRfu']");
解决方案
要使用Selenium将带有文本的元素标识为Add To Basket ,您可以使用以下任一Locator Strategies:
选择器:
driver.findElement(By.cssSelector("button[data-testid='addToClientBasket']>span>i.icon-Expand_Cross_30_by_30"));
路径:
driver.findElement(By.xpath("//button[@data-testid='addToClientBasket']/span[contains(., 'Add To Basket')]"));
据推测,继续前进,您将click()
在元素上调用,在这种情况下,理想情况下您需要诱导WebDriverWait并且elementToBeClickable()
您可以使用以下任一Locator Strategies:
cssSelector
:new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("button[data-testid='addToClientBasket']>span>i.icon-Expand_Cross_30_by_30"))).click();
xpath
:new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//button[@data-testid='addToClientBasket']/span[contains(., 'Add To Basket')]"))).click();
推荐阅读
- python-3.x - 我的 kivy 程序正在打印最后一个按钮的名称,无论我按下哪个按钮
- c# - 如何从我的 C# 应用程序中检查新 Microsoft Edge Chromium 的版本?
- react-native - 移除推送通知监听器 React Native Expo
- php - PHP cURL 使用我的 IP 地址而不是服务器?
- python - 使用新数据测试文本分类 ML 模型失败
- javascript - 将对象数组转换为嵌套对象数组js
- angular - Angular Link 未通向组件
- r - 为什么我的新 var 名称显示为“... <- NULL”
- selenium - 使用 selenium webdriver 单击隐藏元素
- java - Spring Boot - SimpMessagingTemplate 没有在具有 Spring Boot 安全性的 Spring Boot WebSocket 中向客户端发送消息