Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Получение текста из WebElement с помощью .getText()

java
webdriver
testng
selenium
Теги: #<Tag:0x00007fedbbf25f98> #<Tag:0x00007fedbbf25e58> #<Tag:0x00007fedbbf25d18> #<Tag:0x00007fedbbf25b60>

(Til Ulenshpigel) #1

Selenium WebDriver, intellij IDEA, java

Нужно подсчитать количество вакансий на странице, например, Специалист по тестированию.
Я получал лист WebElements, в котором хранятся заголовки всех вакансий, а потом через паттерн прогонял на совпадение. Если совпадает, то счетчик +.
На хроме работает хорошо, все считает и никаких проблем нет. На mozilla ff столкнулся с тем, что берет текст с куском юникода с сайта и, соответстввенно, в регулярке не находит совпадение. Конечно, можно поставить юникод в то место, где он есть, но я выяснил, что место, в котором он появляется, рандомно. примерно такого формата текст.
В таком формате приходит текст из ff в idea.

Как можно обойти этот юникод? Вариантов решения не нашел:)

List vacansies = driver.findElements(By.xpath("//a[contains(@class,‘search-result-item__name search-result-item__name’)]"));
int i = 0;
for (WebElement x : vac) {
System.out.println(x.getText());
Matcher m = Pattern.compile(regex).matcher(x.getText());
if (m.find()) {
i++;
}
}


(Che Xaker) #2

Попробуй так

str(u"твоя\u200Eстрока")

(Til Ulenshpigel) #3

Извините, не указал, что на джаве пишу. Ваш вариант, как я понял, для puthon.


(Che Xaker) #4

Нет нет єто я не заметил что єто для intellij IDEA, java. Утром посмотрю что для java и как єто реализовать . . .


(Til Ulenshpigel) #5

Пока что решил проблему так:
Matcher m = Pattern.compile(regex).matcher(x.getText().replaceAll("\u200E",""));

Как вариант, еще можно реплейсить все, кроме русских букв\пробелов, но еще не реализовывал.


(Olga Govor) #6

Тогда стоит реплейсить все юникодовские элементы, а то вдруг завтра выскочит что-то другое…
Хотя я бы попробовала понять почему эти символы вообще появляются…
Вот стоит почитать: Символы Юникода, управляющие форматом (категория Cf), такие как RIGHT-TO-LEFT MARK (\u200F) и LEFT-TO-RIGHT MARK (\u200E), управляют визуальным представлением текста, в котором они присутствуют. Они имеют большое значение для корректного отображения текста на некоторых языках и являются допустимыми в комментариях JavaScript, строковых литералах и в литералах регулярных выражений, но не в идентификаторах (таких как имена переменных), определяемых в программах JavaScript.


(Til Ulenshpigel) #7

String web=“something”;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < web.length(); i++) {
if ((Character.isLetterOrDigit(web.charAt(i))) | (web.charAt(i) == ’ ') | (web.charAt(i) == ‘-’))
sb.append(web.charAt(i));
}

Таким образом решил проблему (web.charAt(i) == ‘-’) это уже конкретно под мою программу элемент.


(Lion_son) #8

Попробуй применить в xpath его функцию normalize-space
Что-то вроде этого:

List vacansies = driver.findElements(By.xpath("//a[contains(@class,‘search-result-item__name search-result-item__name’)]/normalize-space(text())"));

Код не проверял, не уверен на 100%, что этот вариант сработает.