webentwicklung-frage-antwort-db.com.de

So finden Sie, ob auf der Seite ein Text vorhanden ist

Wenn der Text vorhanden ist, klicken Sie auf xyz, ansonsten klicken Sie auf abc.

Ich verwende die folgende if-Anweisung: 

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

Das Skript schlägt mit der folgenden Fehlermeldung fehl:

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

Versuchen Sie diesen Code:

Der nachstehende Code dient zum Überprüfen des Vorhandenseins von Text auf der gesamten Webseite.

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

else
{
    //Click abc
}

Wenn Sie den Text eines bestimmten Webelements überprüfen möchten

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

else
{
    //Click abc
}
28
Manigandan

Sie müssen das "IsDisplayed" in einen Try-Catch einpacken. "IsDisplayed" kann nur aufgerufen werden, wenn das Element existiert. 

Möglicherweise möchten Sie auch das implizite Time Out überschreiben, andernfalls dauert das Try/Catch lange.

1
Robbie Wareham

Hier können wir try verwenden, mit Ausnahme der Funktion, die den Python-Webtreiber verwendet. siehe unten den 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

Probieren Sie den folgenden Code aus: -

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

Zuallererst sind XPaths dieses Typs und byLinkText wirklich schlechte Locators und schlagen häufig fehl. Die Locators sollten deskriptiv, eindeutig und unwahrscheinlich sein. Priorität ist zu verwenden:

  1. ICH WÜRDE
  2. Klasse
  3. CSS ( bessere Leistung als XPath )
  4. XPath

Dann können Sie getText() für das Element und nicht für die gesamte Seite (getPageSource()) verwenden, die genauer ist. try catch ist auch eine gute Praxis für isDisplayed(), wie @Robbie angegeben hat, oder besser noch FluentWait , um das Element zu finden:

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

Dann wie folgt verwenden:

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