InvalidSelectorException使用CSS选择器来查找“数据 - ”属性的元素谱写(

2019-07-30 01:19发布

动机

要使用CSS属性选择器一起使用Selenium的CSS选择机制和HTML5 data-自定义属性,以解决具体挂钩的元素。

问题

而使用上述定位用CSS类名和所分配的元素data-属性,下面抛出异常:

Caused by: org.openqa.selenium.remote.ErrorHandler$UnknownServerException: The given selector .gs-a-btn["data-value"] is either invalid or does not result in a WebElement. The following error occurred:
[Exception... "An invalid or illegal string was specified"  code: "12" nsresult: "0x8053000c (NS_ERROR_DOM_SYNTAX_ERR)"  location: "file:///C:/DOCUME~1/eliranm/LOCALS~1/Temp/anonymous6109849275533680625webdriver-profile/extensions/fxdriver@googlecode.com/components/driver_component.js Line: 5956"]
Build info: version: '2.23.1', revision: '17143', time: '2012-06-08 18:59:28'
System info: os.name: 'Windows XP', os.arch: 'x86', os.version: '5.1', java.version: '1.6.0_31'
Driver info: driver.version: unknown
    at <anonymous class>.<anonymous method>(file:///C:/DOCUME~1/eliranm/LOCALS~1/Temp/anonymous6109849275533680625webdriver-profile/extensions/fxdriver@googlecode.com/components/driver_component.js:6537)

相关代码

public void previous(String type) {
    By cssSelector = By.cssSelector(".gs-a-btn[data-value='" + type + "']");
    driver.findElement(cssSelector).click();
}

我有什么企图

  • 与属性选择查询中逃脱双引号代替单引号。
  • 指定属性选择代替的属性-值选择器,即".gs-a-btn[\"data-value\"]"".gs-a-btn[data-value='" + type + "']"
  • 查找信息的引用,如硒参考 ,对CSS属性选择器的任何限制。 该文件明确指出:

    目前CSS选择器支持除了在CSS3命名空间中的所有CSS1,CSS2和CSS3选择器,一些伪类( :nth-of-type:nth-last-of-type:first-of-type:last-of-type:only-of-type:visited:hover:active:focus:indeterminate )和伪构件( ::first-line::first-letter::selection::before::after )。

Answer 1:

您所连结的参考是硒的IDE。

硒的webdriver文档主要可以发现在官方网站在这里(基本用法)和这里(高级用法) ,而且在这里 (又名“什么没能进文档尚” -尤其是常见问题 , 高级用户交互和大量关于硒的内部信息的)。 的信息主要来源是,当然, JavaDoc中 。


无论如何。 硒支持的CSS选择那些由它下面的浏览器(使用Selenium RC具有灒CSS引擎除外)的支持,所以你的例子一定要工作。 使用这个简单的testpage:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
    </head>
    <body>
        <input type="text" id="myInput" class="field" data-test="testytest" />
    </body>
</html>

我能够在IE 8(!!)和Firefox 13成功地运行以下命令:

WebDriver driver = new FirefoxDriver();
driver.get("path to the file");
By cssSelector = By.cssSelector(".field[data-test='testytest']");
        // or By.cssSelector(".field[data-test=testytest]")
        // or By.cssSelector(".field[data-test]")
driver.findElement(cssSelector).sendKeys("Hello");
driver.quit();

所以我挖了。 如果试图在FF13 Firebug的控制台运行任何这样的:

document.querySelector(".field[data-test]")
document.querySelector(".field[data-test=testytest]")
document.querySelector(".field[data-test='testytest']")

它返回正确的元素。 然而,任何这样的:

document.querySelector(".field['data-test']")
document.querySelector(".field[\"data-test\"]")

失败“被指定无效或非法字符串”错误(无论是在Firefox和IE)这是正确的(因此,你得到了错误的信息是正确的,选择是无效的)。

请再试一次,摆脱任何报价,请确保您的type变量不包含任何引号或反斜线或诸如此类的东西。 将构建绝对应该工作。 如果没有,发布新的异常堆栈跟踪,所以我们可以看到,它造成的确切选择。



文章来源: InvalidSelectorException using CSS selector to locate “data-” attribute notated elements