Как найти текст на странице
Если текст существует, нажмите xyz
else, а затем нажмите 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();
}
Script выходит из строя со следующим сообщением об ошибке:
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
}
Если вы хотите проверить текст на определенном веб-элементе
if(driver.findElement(By.id("Locator ID")).getText().equalsIgnoreCase("Yor Text"))
{
//Click xyz
}
else
{
//Click abc
}
Ответ 2
Здесь мы можем использовать функцию try, кроме функции, используя веб-драйвер python. см. ниже код
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()
Ответ 3
Вам нужно обернуть "IsDisplayed" в try catch. "IsDisplayed" может вызываться только в том случае, если элемент существует.
Вы также можете переопределить значение Implicit Time Out, иначе попытка try/catch займет много времени.
Ответ 4
Прежде всего, XPaths этого типа и byLinkText
являются действительно плохими локаторами и часто будут терпеть неудачу. Локаторы должны быть описательными, уникальными и вряд ли измениться. Приоритет заключается в использовании:
Затем вы можете использовать getText()
для элемента, а не для всей страницы (getPageSource()
), что более конкретно. try catch
также является хорошей практикой для isDisplayed()
, как указано в @Robbie, или еще лучше использовать FluentWait, чтобы найти элемент:
// 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");
});
Ответ 5
Попробуйте этот код ниже: -
Assert.assertTrue(driver.getPageSource().contains(textOnThePage));