Как найти элементы по тексту, игнорируя регистр, используя Selenium и Xpath - PullRequest
2 голосов
/ 06 июня 2019

Я использую версию Java "1.8.0_191" и селен 3.141.59.

Я пытаюсь выяснить, содержит ли страница слово «ошибка» или «ошибка». Кроме того, я хочу, чтобы он не учитывал регистр.

Найти текст легко:

List<WebElement> elementList = driver.findElements(By.xpath("//*[contains(text(), 'error')]"));

К тому же мне все труднее сделать это без учета регистра. До сих пор я пробовал это (вдохновленный этим вопросом ):

List<WebElement> elementList = driver.findElements(By.xpath("/html/body//text()[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'error')]"));

Но возвращается следующая ошибка:

org.openqa.selenium.WebDriverException: TypeError: Expected an element or WindowProxy, got: [object Text] {}

Я тоже пробовал это:

 List<WebElement> elementList = driver.findElements(By.xpath("//*[contains(transate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'error')]"));

Но это тоже не работает (так как это не юридическое выражение).

Итак, есть идеи, как заставить это работать?

Ответы [ 2 ]

1 голос
/ 06 июня 2019

Чтобы создать список элементов на веб-странице, содержащей текст error , игнорируя верхний / нижний регистры, вы можете использовать функцию translate() внутри следующим образом:

  • Синтаксис:

    translate('some text','abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')
    
  • Строка кода:

    List<WebElement> elementList = driver.findElements(By.xpath("//*[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'error')]"));
    
0 голосов
/ 06 июня 2019

XPATH 2 позволяет выполнять сопоставления без учета регистра, но большинство браузеров имеют XPATH 1.

Лучше всего будет использовать комбинацию текста в одном XPATH. Нравится:

"//*[contains(text(), 'error') or contains(text(), 'ERROR') or contains(text(), 'erreur') or contains(text(), 'ERREUR')]"

OR

"//*[contains(text(), 'error')] | //*[contains(text(), 'ERROR')] | //*[contains(text(), 'erreur')] | //*[contains(text(), 'ERREUR')]"
...