Webdriver getText () элемента возвращает пустое - PullRequest
0 голосов
/ 13 мая 2018

У меня есть элемент с динамическим номером. Это уникальный номер заказа, который генерируется после каждого заказа. Я пытаюсь извлечь это число из тега параграфа <p> с помощью метода getText (), но веб-драйвер возвращает пустой текст после запуска теста.

Выполнение:

boolean a = driver.findElement(By.xpath("(.//*[@id='alert-message']/div/p/strong)[1]")).isDisplayed();

возвращает false, предполагая, что элемент не отображается.

Это HTML:

<div class="ng-scope" ng-include="templates[step]">
<div class="ng-scope" ng-controller="wReviewCtrl">
<div class="panel-alert ng-hide" ng-show="success<0">
<div class="panel-alert" ng-show="success>0 && hasRole('BUYER')">
<div class="alert-wrap in">
<div id="alert-message" class="alert alert-success" role="alert">
<div class="media">
<strong>Done!</strong>
<p>
A new order with Number
<strong class="ng-binding">JJ-MD000-12345</strong>  //Order number
 was generated. The order is now complete.
</p>
</div>
</div>
</div>
</div>
<div class="panel-alert ng-hide" ng-show="success>0 && hasRole('SELLER')">
<div class="alert-wrap in">
<div id="alert-message" class="alert alert-success" role="alert">
<div class="media">
<strong>Done!</strong>
<p>

Я пытался получить текст, используя:

String orderNo = driver.findElement(By.xpath("(.//*[@id='alert-message']/div/p/strong)[1]")).getText();
System.out.println(orderNo);

Я перепробовал все виды альтернативных комбинаций вместо .getText(), включая:

.getAttribute("textContent");
.getAttribute("innerHTML");
.getAttribute("value");  //retuns NULL value
.getAttribute("outerText");

Но ни один из них не работал. Как я могу получить этот номер заказа в HTML?

Ответы [ 3 ]

0 голосов
/ 14 мая 2018

В соответствии с HTML, которым вы поделились, желаемый элемент является элементом Angular , поэтому вы можете вызывать WebDriverWait с ExpectedConditions , установленным как attributeToBeNotEmpty(), а затем извлекать / распечатывать динамическое значение согласно следующему блоку кода:

new WebDriverWait(driver, 20).until(ExpectedConditions.attributeToBeNotEmpty(driver.findElement(By.xpath("//div[@class='alert alert-success' and @id='alert-message']/div[@class='media']//p//strong[@class='ng-binding']")), "innerHTML"));
System.out.println(driver.findElement(By.xpath("//div[@class='alert alert-success' and @id='alert-message']/div[@class='media']//p//strong[@class='ng-binding']")).getAttribute("innerHTML"));
0 голосов
/ 14 мая 2018

Подумайте об использовании явного ожидания и проверьте, чтобы элемент стал видимым.Когда открывается всплывающее окно, вы пытаетесь получить доступ к тексту, прежде чем angular сможет обновить привязку.В результате вы получаете пустой текст.

0 голосов
/ 14 мая 2018

Получение всего текста в теге p работает, и я получил вывод: «Сгенерирован новый заказ с номером JJ-MD000-12345. Заказ завершен».Мое намерение состоит в том, чтобы получить только номер заказа, и этот тот, который возвращается пустым.Любые идеи?

Я бы предложил следующее, если только номер заказа является динамическим:

String s = "A new order with Number JJ-MD000-12345 was generated. The order is now complete."; // is the string, which you are getting from 'p' tag
String[] parts = s.split(" "); // split this string to parts
String output = parts[5]; // choose the part with your order number
System.out.println(output); // JJ-MD000-12345
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...