在official W3c webdirver documentation中,明确指出位置策略是:
State Keyword
CSS selector "css selector"
Link text selector "link text"
Partial link text selector "partial link text"
Tag name "tag name"
XPath selector "xpath"
但是,Selenium's wire protocol允许:
class name
css selector
id
name
link text
partial link text
tag name
xpath
在理论中,Selenium的文档已经过时,“真实”的故事在新的规范文档中。但是......
我对最新的Chrome自己的Webdriver进行了一些测试,我可以确认name
和class name
都有效;但是,它们不符合规范。
我记得在Chromium问题上阅读他们只会实现官方Webdriver规范。
现在:我知道通用答案,其中“规格并不总是100%”等等。但是,我想知道的是:
答案 0 :(得分:8)
是的,你看对了。
根据当前 WebDriver - W3C Candidate Recommendation
,Locator Strategies
入伍的人数如下:
"css selector"
:CSS选择器"link text"
:链接文字选择器"partial link text"
:部分链接文字选择器"tag name"
:标记名称"xpath"
:XPath选择器快照:
但是,JsonWireProtocol
曾用于支持下面列出的定位策略,但目前文档明确指出其状态为已过时:
class name
:返回类名包含搜索值的元素;不允许使用复合类名称。css selector
:返回与CSS选择器匹配的元素。id
:返回ID属性与搜索值匹配的元素。name
:返回其NAME属性与搜索值匹配的元素。link text
:返回其可见文本与搜索值匹配的锚元素。partial link text
:返回一个锚元素,其可见文本与搜索值部分匹配。tag name
:返回标记名称与搜索值匹配的元素。xpath
:返回与XPath表达式匹配的元素。提供的XPath表达式必须应用于服务器"原样&#34 ;;如果表达式不是相对于元素根,则服务器不应修改它。因此,XPath查询可能会返回未包含在根元素的子树中的元素。快照:
此更改通过各自的客户端特定绑定传播。对于 Selenium-Java
客户,这里是client code,我们为用户提供了switchcase:
switch (using) {
case "class name":
toReturn.put("using", "css selector");
toReturn.put("value", "." + cssEscape(value));
break;
case "id":
toReturn.put("using", "css selector");
toReturn.put("value", "#" + cssEscape(value));
break;
case "link text":
// Do nothing
break;
case "name":
toReturn.put("using", "css selector");
toReturn.put("value", "*[name='" + value + "']");
break;
case "partial link text":
// Do nothing
break;
case "tag name":
toReturn.put("using", "css selector");
toReturn.put("value", cssEscape(value));
break;
case "xpath":
// Do nothing
break;
}
return toReturn;

快照:
现在,您的问题必须是 W3C Specs
和 clients
中此更改的原因。根据{{3}},来自 WebDriver贡献者的答案非常简单:
<强>
This keeps the specification simple as these can be implemented using the CSS selector, which maps down to querySelector/querySelectorAll.
强>