Невозможно получить текст с помощью text() в XPath

Вот часть html-кода:

<td class="audit-context-break-word text-left" nowrap="nowrap">
<b class="ng-binding">PONumber</b></td>
<td class="audit-context-break-word text-left ng-binding">20202022  02_001  </td>

Мне нужно получить только текст внутри (ожидаемое значение: 20202022 02_001). Я пробовал следующие варианты:

By.xpath("/descendant::*[.='PONumber']/../descendant::*[@class=\"audit-context-break-word text-left ng-binding\"]/text()")
By.xpath("/descendant::*[.='PONumber']/../following::text()[1]")

Проблема в том, что в FirePath выделенный текст находится, а в тесте нет. Это не удалось из-за исключения тайм-аута, потому что элемент не найден

В чем причина неудачи?


person Yuliya    schedule 02.10.2015    source источник
comment
Должен ли это быть XPath?   -  person JeffC    schedule 05.10.2015
comment
Не обязательно XPath, допустимы любые другие способы   -  person Yuliya    schedule 06.10.2015


Ответы (4)


Вы можете использовать following-sibling для записи Xpath.

WebElement element=driver.findElement(By.xpath("//td[b[contains(text(),'PONumber')]]/following-sibling::td"));
        String text = element.getText();
        System.out.println(text);
  1. Я идентифицирую соответствующий веб-элемент на веб-странице и сохраняю его в веб-элементе.

  2. Использование метода getText() для получения текста из этого веб-элемента и сохранения его в строке

  3. Распечатайте эту строку text

person Deepak_Mahalingam    schedule 05.10.2015
comment
Благодарность! попробовал ваш вариант, но все равно возвращается пустая строка - person Yuliya; 06.10.2015
comment
если да, @Yuliya, вы можете использовать следующий xpath driver.findElement(By.xpath(//td[contains(text(),'20202022 02_001')])).getText(); или driver.findElement(By.xpath(//td[b[содержит(text(),'PONumber')]]/following-sibling::td[содержит(text(),'20202022 02_001')])); - person Deepak_Mahalingam; 07.10.2015
comment
окончательно решено: WebElement element = driver.findElement(By.xpath(//td[b = 'PONumber']/following-sibling::td)); Текст строки = element.getAttribute(textContent); Номер строки = StringUtils.trim(text); обратный номер; - person Yuliya; 09.10.2015

Вы должны использовать following-sibling:

driver.findElement(By.xpath("//td[b = 'PONumber']/following-sibling::td")).getText();
person alecxe    schedule 02.10.2015

Selenium не может оценить функцию text() для xpath. вы можете запустить javascript и получить результат. запустите следующий javascript в вашей программе:

document.evaluate("//span[@class='tableNode']/text()[preceding-sibling::br and following-sibling::br]", document, null, XPathResult.STRING_TYPE, null).stringValue;

если вы используете Python или Java, я могу представить

person Mahsum Akbas    schedule 02.10.2015

I had a similar problem where an element was visible but tests wouldn't pass on isTextPresent. When I checked the source code, it was

  • 2-1180 \&\nbsp ГОРОД 2
  • , whereas the test was looking for "2-1180 CITY 2". Check if you have a similar problem too. Let us know what works for you, would be interested in knowing.

    Примечание: не минусуйте, просто помогите.

    person night_fury    schedule 02.10.2015