web-dev-qa-db-fra.com

Comment trouver si un texte existe sur la page

Si le texte existe, cliquez sur xyz sinon cliquez sur abc.

J'utilise l'instruction if ci-dessous: 

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();
}

Le script échoue avec le message d'erreur suivant:

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

Essayez ce code:

Le code ci-dessous permet de vérifier la présence de texte dans toute la page Web.

if(driver.getPageSource().contains("your Text"))
{
    //Click xyz
}

else
{
    //Click abc
}

Si vous voulez vérifier le texte sur un élément Web particulier

if(driver.findElement(By.id("Locator ID")).getText().equalsIgnoreCase("Yor Text"))
{
    //Click xyz
}

else
{
    //Click abc
}
28
Manigandan

Vous devez envelopper le "IsDisplayed" dans une capture d'essai. "IsDisplayed" ne peut être appelé que si l'élément existe. 

Vous voudrez peut-être également remplacer le délai d'expiration implicite, sinon l'essai/capture prendra beaucoup de temps.

1
Robbie Wareham

Ici, nous pouvons utiliser try, sauf la fonction utilisant le pilote Web Python. voir ci-dessous le code

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

Essayez ce code ci-dessous: -

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

Tout d’abord, les XPath de ce type et byLinkText sont de très mauvais localisateurs et échoueront fréquemment. Les localisateurs doivent être descriptifs, uniques et peu susceptibles de changer. La priorité est d'utiliser:

  1. ID
  2. Classe
  3. CSS ( meilleure performance que XPath )
  4. XPath

Ensuite, vous pouvez utiliser getText() sur l'élément plutôt que sur la page entière (getPageSource()), qui est plus spécifique. try catch est également une bonne pratique pour isDisplayed(), comme @Robbie l'a indiqué, ou encore mieux, utilisez FluentWait pour trouver l'élément:

// 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)

Puis utilisez comme ceci:

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