如何查找页面上是否存在文本

时间:2013-02-20 07:31:49

标签: java selenium selenium-webdriver

如果文字存在,请点击xyz,否则点击abc

我正在使用以下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]"}

5 个答案:

答案 0 :(得分:28)

试用此代码:

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

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

else
{
    //Click abc
}

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

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

else
{
    //Click abc
}

答案 1 :(得分:1)

这里我们可以使用try,除了使用python web驱动程序的函数。见下面的代码

webtable=driver.find_element_by_xpath("xpath value")
print webtable.text
try:
   xyz=driver.find_element_by_xpath(("xpath value")
   xyz.click()

except:
   abc=driver.find_element_by_xpath(("xpath value")
   abc.click()

答案 2 :(得分:1)

你需要在try catch中包装“IsDisplayed”。只有元素存在时才能调用“IsDisplayed”。

你可能也希望覆盖隐式超时,否则try / catch需要很长时间。

答案 3 :(得分:0)

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

  1. ID
  2. CSS better performence than XPath
  3. 的XPath
  4. 然后,您可以在元素上使用getText(),而不是在更具体的整个页面(getPageSource())上使用try catchisDisplayed()也是@Robbie所说的// 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) 的好习惯,或者更好地使用FluentWait来查找元素:

    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");
      });
    

    然后像这样使用:

    github source

答案 4 :(得分:0)

请尝试以下代码: -

Assert.assertTrue(driver.getPageSource().contains(textOnThePage));