如何使用硒查找页面上是否存在文本 [已关闭]

2022-09-01 17:23:20

如果文本存在,请单击“其他”单击 。xyzabc

我使用以下语句:if

if(driver.findElement(By.xpath("/html/body/div[2]/div/div/div/div/div/div/table/tbody/tr[6]/td[2]")).isDisplayed())
{    
    driver.findElement(By.linkText("logout")).getAttribute("href");          
} else {          
    driver.findElement(By.xpath("/html/body/div/div/div/a[2]")).click();
}

脚本失败,并显示以下错误消息:

Unable to locate element: {"method":"xpath","selector":"/html/body/div[2]/div/div/div/div/div/div/table/tbody/tr[6]/td[2]"}

答案 1

试试这个代码:

以下代码用于检查整个网页中的文本状态。

if(driver.getPageSource().contains("your Text"))
{
    //Click xyz
}

else
{
    //Click abc
}

如果要检查特定 Web 元素上的文本

if(driver.findElement(By.id("Locator ID")).getText().equalsIgnoreCase("Yor Text"))
{
    //Click xyz
}

else
{
    //Click abc
}

答案 2

首先,这种类型的XPaths是非常糟糕的定位器,并且会经常失败。定位器应具有描述性、唯一性且不太可能更改。优先使用:byLinkText

  1. 编号
  2. CSS比 XPath 更好的性能)
  3. XPath

然后,您可以在元素上使用,而不是在整个页面()上使用,这更具体。 正如@Robbie所述,这也是一个很好的做法,或者更好的是使用FluentWait来查找元素:getText()getPageSource()try catchisDisplayed()

// Waiting 10 seconds for an element to be present on the page, checking
// for its presence once every 1 second.
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
    .withTimeout(10, SECONDS)
    .pollingEvery(1, SECONDS)
    .ignoring(StaleElementReferenceException.class)
    .ignoring(NoSuchElementException.class)
    .ignoring(ElementNotVisibleException.class)

然后像这样使用:

wait.until(x -> {
     WebElement webElement = driverServices.getDriver().findElement(By.id("someId"));
     return webElement.getText();
  });

wait.until(x -> {
     WebElement webElement = driverServices.getDriver().findElement(By.id("someOtherId"));
     return webElement.getAttribute("href");
  });

推荐