如果文字存在,请点击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]"}
答案 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
是非常糟糕的定位器,并且会经常失败。定位器应该描述性,唯一且不太可能更改。优先使用:
然后,您可以在元素上使用getText()
,而不是在更具体的整个页面(getPageSource()
)上使用try catch
。 isDisplayed()
也是@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));