25

如果文本存在,则单击xyzelse click on 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]"}
4

5 回答 5

33

试试这个代码:

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

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
}
于 2013-02-20T08:53:18.060 回答
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()
于 2013-02-20T08:33:54.723 回答
1

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

您可能还想覆盖隐式超时,否则 try/catch 将花费很长时间。

于 2013-02-20T13:38:29.357 回答
1

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

  1. ID
  2. 班级
  3. CSS比 XPath 性能更好
  4. XPath

然后您可以在元素上使用,而不是在更具体getText()的整个页面 ( ) 上使用。正如@Robbie 所说,这也是一个很好的做法,或者更好的是使用FluentWait来查找元素: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");
  });
于 2016-11-15T10:31:39.517 回答
0

试试下面的代码: -

Assert.assertTrue(driver.getPageSource().contains(textOnThePage));
于 2016-12-21T18:25:49.987 回答