Как найти текст на странице - программирование
Подтвердить что ты не робот

Как найти текст на странице

Если текст существует, нажмите 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]"}
4b9b3361

Ответ 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));