java - 尝试在跨度中查找文本元素
问题描述
我正在用 Java 编写 selenium webdriver 测试。我需要测试单击 chrome 中没有 ID 或名称的“是”按钮。我找不到要单击仅具有“是”作为其唯一标识符的按钮的元素。还有一个“否”按钮。
我尝试使用 xpath、类名查找 WebElement,并且尝试了 findElements 函数。什么都没有成功。
这是 HTML:
<span class="ui-btn-inner">
<span class="ui-btn-text popup-anchor-text">Yes</span>
</span>
我努力了:
WebElement yesBtn = browser.findElement(By.xpath("//div[@class='ui-btn-text popup-anchor-text']/span"));
WebElement yesBtn = browser.findElement(By.xpath("//span[.='Yes']"));
WebElement yesBtn = browser.findElement(By.xpath("//div[contains(text(), 'Yes')]"));
WebElement yesBtn = browser.findElement(By.xpath("//button[@class='ui-btn-text popup-anchor-text' and span='Yes']"));
WebElement yesBtn = browser.findElement(By.xpath("//div[@class='ui-btn-text popup-anchor-text' and span='Yes']"));
yesBtn.click();
List<WebElement> yesBtn = browser.findElements(By.className("ui-btn ui-shadow ui-btn-corner-all ui-btn-up-a"));
yesBtn.get(0).click();
错误信息:NoSuchElementException;没有这样的元素。无法定位元素。
解决方案
正确的 XPath 定位器是:
//span[text()='Yes']
以防万一你可以去normalize-space()
功能:
//span[normalize-space()='Yes']
如果这没有帮助:
确保 span 不属于iframe,否则您必须在尝试定位元素之前切换到 iframe 。
driver.switchTo().frame("your-frame");
确保使用WebDriverWait类,以防万一元素不能立即使用,这样 WebDriver 会在轮询间隔内执行多次查找尝试
new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//span[text()='Yes']")));
推荐阅读
- terraform - terraform 0.13.5 资源在连续调用时相互覆盖
- .htaccess - 仅 301 重定向首页
- python - RCV1 数据集上的 Bagging 分类器
- reactjs - 获取位置后如何自动导航到下一个屏幕
- reactjs - 如何最好地使用 ReactJS 中的集合更新
- r - 使用 RandomizeR 在 R 中随机化处理
- c# - 如何将sqllite连接到c#应用程序
- python - Python-telegram - 是否可以获得组中用户发送的消息数量?
- firebase-cloud-messaging - 发送到多个设备时如何处理推送通知,但其中一些失败
- .net - AspNet Core 3.1:将 IdentityUser 错误转换为 ApplicationUser