尝试在跨度中查找文本元素

时间:2019-07-11 01:27:22

标签: java selenium xpath

我正在用Java编写一个硒Webdriver测试。我需要测试以单击没有ID或名称的Chrome中的“是”按钮。 我找不到要单击唯一标识为“是”的按钮的元素。还有一个“否”按钮。

我尝试使用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;没有这样的元素。无法找到元素。

2 个答案:

答案 0 :(得分:1)

正确的XPath定位器将是:

//span[text()='Yes']

以防万一您可以申请normalize-space() function

//span[normalize-space()='Yes']

如果这没有帮助:

  1. 请确保跨度不属于iframe,否则在尝试定位该元素之前,您将必须switch to the iframe

    driver.switchTo().frame("your-frame");
    
  2. 确保使用WebDriverWait类,以防万一该元素不立即可用,因此WebDriver会以轮询间隔执行几次查找尝试

    new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//span[text()='Yes']")));
    

答案 1 :(得分:0)

尝试//span[@class='ui-btn-inner']/descendant::span[contains(text(), 'Yes')]。它应该帮忙。