it-roy-ru.com

Как узнать, существует ли текст на странице

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

Попробуйте этот код:

Приведенный ниже код используется для проверки наличия текста на всей веб-странице.

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
}
28
Manigandan

Вы должны обернуть "IsDisplayed" в попытку поймать. «IsDisplayed» можно вызвать, только если элемент существует. 

Вы можете также переопределить неявный тайм-аут, иначе попытка/отлов займет много времени.

1
Robbie Wareham

Здесь мы можем использовать 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()
1
Kv.senthilkumar

Попробуйте этот код ниже: -

Assert.assertTrue(driver.getPageSource().contains(textOnThePage));
0
cell-in

Во-первых, XPath этого типа и byLinkText являются действительно плохими локаторами и часто выходят из строя. Локаторы должны быть описательными, уникальными и вряд ли изменятся. Приоритет заключается в использовании:

  1. Я БЫ
  2. Учебный класс
  3. CSS ( лучшая производительность, чем XPath )
  4. XPath

Затем вы можете использовать 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");
  });
0
Moshisho