Eli*_*lka 13 selenium webdriver css-selectors
利用Selenium的CSS选择器机制以及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)
Run Code Online (Sandbox Code Playgroud)
public void previous(String type) {
By cssSelector = By.cssSelector(".gs-a-btn[data-value='" + type + "']");
driver.findElement(cssSelector).click();
}
Run Code Online (Sandbox Code Playgroud)
".gs-a-btn[\"data-value\"]"相当".gs-a-btn[data-value='" + type + "']".查找引用中的信息,例如Selenium Reference,以了解对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).
Pet*_*ček 12
您链接的引用是Selenium IDE.
Selenium WebDriver文档主要可以在这里的官方网站(基本用法)和这里(高级用法)找到,但也可以在这里(也就是"尚未进入文档的内容") - 特别是FAQ,高级用户交互和批量关于Selenium internals的信息).所述的信息主要来源是,当然,JavaDoc中.
无论如何.Selenium支持的CSS选择器是它下面的浏览器支持的(除了Selenium RC,它有一个Sizzle CSS引擎),所以你的例子肯定会有效.使用这个简单的测试页面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
</head>
<body>
<input type="text" id="myInput" class="field" data-test="testytest" />
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我能够在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();
Run Code Online (Sandbox Code Playgroud)
所以我挖了更多.如果您尝试在FF13 Firebug控制台中运行以下任何一项:
document.querySelector(".field[data-test]")
document.querySelector(".field[data-test=testytest]")
document.querySelector(".field[data-test='testytest']")
Run Code Online (Sandbox Code Playgroud)
它返回正确的元素.但是,任何这个:
document.querySelector(".field['data-test']")
document.querySelector(".field[\"data-test\"]")
Run Code Online (Sandbox Code Playgroud)
失败并显示"指定了无效或非法字符串"错误(在Firefox和IE中)都是正确的(因此,您获得的错误消息是正确的,选择器无效).
请再试一次,删除任何引号,确保您的type变量不包含任何引号或反斜杠或诸如此类的东西.该结构应该绝对有效.如果没有,请发布新的异常堆栈跟踪,以便我们可以看到导致它的确切选择器.
| 归档时间: |
|
| 查看次数: |
40684 次 |
| 最近记录: |