Мой вопрос об элементе поиска Selenium от css selector - PullRequest
0 голосов
/ 18 октября 2018

Я использую Selenium для поиска веб-элемента с помощью css-селектора.Когда я жестко его кодирую, он работает нормально, как показано ниже.

driver.findElement(By.cssSelector("div[aria-label=\"2018-10-17 Shared Google Drive Folder\"]")).getAttribute("data-id");

Однако, если я хочу настроить строку селектора css на основе даты, как показано ниже, выдается ошибка:

org.openqa.selenium.InvalidSelectorException: invalid selector: An invalid or illegal selector was specified

Я распечатываю cssFormatString, и она выглядит точно так же, как жестко закодированная выше.Кто-нибудь может сказать мне, где это пошло не так?

// Customized cssFormatString code
Date date = new Date();
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String strDate = dateFormat.format(date);
String cssFormatString = "div[aria-label=\\\"" + strDate +  " Shared Google Drive Folder\\\"]";
driver.findElement(By.cssSelector(cssFormatString)).getAttribute("data-id");

Ответы [ 4 ]

0 голосов
/ 18 октября 2018

Вы должны использовать одинарные кавычки вместо двойных, например:

String cssFormatString = "div[aria-label='2018-10-17 Shared Google Drive Folder']"

0 голосов
/ 18 октября 2018

Если вы хотите создать cssSelector , используя значение из strDate и текст Общая папка Google Drive , вы можете использовать следующее решение:

// Customized cssFormatString code
Date date = new Date();
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String strDate = dateFormat.format(date);
driver.findElement(By.cssSelector("div[aria-label^='" + strDate + "'][aria-label$='Shared Google Drive Folder']")).getAttribute("data-id");
0 голосов
/ 18 октября 2018

Ваш код не работает, потому что вы используете ненужные обратные слэши \
Результат вашего кода div[aria-label=\"2018-10-18 Shared Google Drive Folder\"], и из-за обратных слэшей вы получаете ошибку неверного селектора.

Используйте одну обратную косую черту, чтобы экранировать кавычки, как вкод ниже:

String cssFormatString = "div[aria-label=\"" + strDate +  " Shared Google Drive Folder\"]"

Значение будет: div[aria-label="2018-10-18 Shared Google Drive Folder"]

Или используйте одинарные кавычки, как в ответе @Navarasu.

0 голосов
/ 18 октября 2018

Просто используйте одинарные кавычки вместо двойных кавычек, это должно работать.

String cssFormatString = "div[aria-label='2018-10-17 Shared Google Drive Folder']"

Таким образом, ваша конкатенация строк будет простой,

String cssFormatString = "div[aria-label='" + strDate +  " Shared Google Drive Folder']"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...