Найдите тексты, содержащие кавычки по xpath в Selenium

Я только что получил ошибку в Selenium(Java):

Невозможно найти элемент с выражением xpath //*[contains(.,'Поле SomeField должно быть строковым или массивным типом с максимальной длиной'60'.')]

Судя по всему, есть два 'что нарушило выражение. Поэтому я изменил код с

WebElement elem = findElement(By.xpath("//*[contains(.,'" + arg + "')]"));

к

WebElement elem = findElement(By.xpath("//*[contains(.,'" + arg.toString().replace("'", "\'") + "')]"));
WebElement elem = findElement(By.xpath("//*[contains(.,'" + arg.toString().replace("'", "\\'") + "')]"));
WebElement elem = findElement(By.xpath("//*[contains(.,'" + arg.toString().replace("'", "\\\'") + "')]"));

Ни один из них не работал. Сейчас я временно работаю над этим следующим образом:

WebElement elem = findElement(By.xpath("//*[contains(.,\"" + arg + "\"')]"));

Но ошибка вернется, если arg содержит " в этом.

Кто-нибудь знает, как это сделать? Спасибо за вашу помощь.

1 ответ

Решение

Использовать String.format построить xpath следующими способами:

WebElement elem = findElement(By.xpath(String.format("//*[contains(.,\"%s\")]", arg)));

Для получения дополнительной информации о String.format ознакомьтесь с его документацией. Аргументы формата можно найти здесь.


arg может содержать только '

WebElement elem = findElement(By.xpath(String.format("//*[contains(.,\"%s\")]", arg)));

arg может содержать только "

WebElement elem = findElement(By.xpath(String.format("//*[contains(.,'%s')]", arg)));

arg может содержать оба ' а также "

Сбежать все " в аргументе с arg.replace("\"", """); и создайте свой Xpath как

WebElement elem = findElement(By.xpath(String.format("//*[contains(.,\"%s\")]", arg)));
Другие вопросы по тегам