Очевидно, что в вашем кодовом блоке нет ошибки, но существует ситуация Catch-22 из-за WebDriver с использованием возможностей собственного XPath браузера .
Собственные возможности браузера XPath
На высоком уровне WebDriver использует встроенные в браузер возможности XPath, где это возможно. В тех браузерах, которые не имеют встроенной поддержки XPath, Selenium предоставили свою собственную реализацию. Это может привести к неожиданному поведению из-за различий в различных движках XPath.
![Browser_Native_Xpath_Capabilities](https://i.stack.imgur.com/HfIXQ.png)
Например, для следующего фрагмента HTML:
<input type="text" name="example" />
<INPUT type="text" name="other" />
Если ваша строка кода:
List<WebElement> inputs = driver.findElements(By.xpath("//input"));
Будет найдено следующее количество совпадений:
![Xpath_Native_Support](https://i.stack.imgur.com/w3rpL.png)
Решение
Поскольку элемент был идентифицирован на основе текста как Джеффа Смита , вам нужно сопоставить с отрендеренным текстом , который является Джеффом Смитом . Таким образом, ваш эффективный блок кода будет:
@Test(priority = 4)
public void VerifyGuest() {
WebElement guestName = driver.findElement(By.xpath("//a[contains(text(),'Jeff Smith')]"));
String expectedName = "Jeff Smith";
String actualName = guestName.getText();
Assert.assertEquals(actualName, expectedName);
System.out.println("Reservation Code Belongs to " + actualName);
}
Примечание : Идентификация элемента с помощью XPath text () и получение текста через getText()
не является правильным способом Assert любого текста. Возможно, желаемый элемент следует отождествить с какой-то другой эффективной локаторной стратегией .