t.me/atinfo_chat Telegram группа по автоматизации тестирования

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

Теги: #<Tag:0x00007f9af9a00730> #<Tag:0x00007f9af9a005c8> #<Tag:0x00007f9af9a00460> #<Tag:0x00007f9af9a00370>

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++;
}
}

Попробуй так

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

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

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

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

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

1 Симпатия

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

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) == ‘-’) это уже конкретно под мою программу элемент.

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

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

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