在W3c webdirver官方文档中,明确指出了定位策略是:
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的有线协议允许:
class name
css selector
id
name
link text
partial link text
tag name
xpath
在THEORY中,Selenium的文档已过时,新规范文档中包含“真实”故事。然而...
我在最新的Chrome浏览器自己的Webdriver上进行了一些测试,我可以确认这一点,name
并且class name
两者都能正常工作。但是,它们不在规格范围内。
我记得在阅读Chromium问题时曾说过,他们只会实施官方的Webdriver规范。
现在:我知道通用答案,其中“规格并非总是遵循100%”等。但是,我想知道的是:
- 您可以在Chromium中找到实现此功能的代码吗?(欢迎链接)
- Chromium邮件列表中是否有关于这些的讨论?
- “非官方”命令(在“旧”硒规范文件中有记录)是否有可能保留?你在哪里读的?
是的,您看对了。
根据目前
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表达式必须“按原样”应用于服务器;如果表达式不是相对于元素根的,则服务器不应修改它。因此,XPath查询可能返回根元素的子树中未包含的元素。快照:
更改通过相应的客户端特定绑定传播。对于
Selenium-Java
客户,这是客户代码,我们在其中为用户提供开关柜:Snapshot :
Now, your question must be why this change in the
W3C Specs
and in theclients
. As per #1042 the Answer from the WebDriver Contributors was pretty straight as :