我对CSS选择器中Selenium的find元素的疑问

时间:2018-10-17 21:20:12

标签: java string selenium selenium-webdriver css-selectors

我正在使用Selenium通过CSS选择器查找Web元素。当我对其进行硬编码时,它的工作原理如下所示。

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 :(得分:6)

只需使用单引号而不是双引号即可。

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

因此您的字符串缩写将很简单,

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

答案 1 :(得分:2)

您必须使用单引号而不是双引号,例如:

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

答案 2 :(得分:1)

如果您要使用strDate中的值和文本 Shared Google Drive Folder 构建 cssSelector ,则可以使用以下解决方案:

// 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");

答案 3 :(得分:0)

您的代码无法使用,因为您使用了不必要的反斜杠\
您的代码结果为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答案。