我试图在Java上学习Selenium,但我无法理解xpath包含为什么找不到正确的元素。
这是整个案子:
@Test
public void test1_FluentWait() {
driver.get("https://www.google.com");
WebElement searchBar = driver.findElement(By.xpath("//input[contains(@name, 'q')]"));
searchBar.sendKeys("Selenium", Keys.ENTER);
Wait<WebDriver> fluentWait = new FluentWait<WebDriver>(driver)
.withTimeout(Duration.ofSeconds(30))
.pollingEvery(Duration.ofSeconds(5))
.ignoring(NoSuchElementException.class);
WebElement element = fluentWait.until(new Function<WebDriver, WebElement>() {
@Override
public WebElement apply(WebDriver w) {
// WebElement ele = w.findElement(By.xpath("//*[contains(text(), 'Selenium - Health Professional')]")); // Doesn't work, no idea why
WebElement ele = w.findElement(By.partialLinkText("Selenium - Health Professional")); // works
// WebElement ele = w.findElement(By.xpath("//*[text()='Selenium - Health Professional']"));
// WebElement ele = w.findElement(By.xpath("//*[contains(@href, 'Selenium-HealthProfessional')]")); // Found attribute, can't click
if (ele.isEnabled()) {
System.out.println("Found");
}
return ele;
}
});
System.out.println(element.getText());
// element.click();
}下面是有争议的元素

因此,基本上,在找到这个元素时,只有partialLinkText才能工作。
WebElement ele = w.findElement(By.xpath("//*[contains(text(), 'Selenium - Health Professional')]")); // Doesn't work, no idea why
WebElement ele = w.findElement(By.partialLinkText("Selenium - Health Professional")); // works
WebElement ele = w.findElement(By.xpath("//*[text()='Selenium - Health Professional']"));包含text()打印“查找”,但返回元素的getText()打印空字符串。单击()引发ElementNotInteractableException
案文()=“.”抛出NoSuchElementException
partialLinkText返回元素并允许单击()
我做错了什么?这里有什么问题?我如何防止这种情况,或知道将来使用哪一种findElement?
发布于 2022-04-15 04:44:40
有可能会发现多个与xpath条件匹配的异常。找到它的一种方法是在xpath中使用findElements并检查列表的计数。
当我们使用findElement时,会返回第一个匹配,这可能是一个不可行的元素或链接。
当您使用partialLinkText时,它知道它必须找到一个链接并与部分文本匹配。
请检查一下这个。
希望能帮上忙。
https://sqa.stackexchange.com/questions/49995
复制相似问题