Найдите тексты, содержащие кавычки по 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)));