在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%”等。但是,我想知道的是:
是的,您看对了。
根据目前WebDriver - W3C Candidate Recommendation的Locator Strategies征募情况如下:
WebDriver - W3C Candidate Recommendation的Locator Strategies
"css selector"
"link text"
"partial link text"
"tag name"
"xpath"
但是,JsonWireProtocol曾经曾经被用来支持下面列出的“定位器策略”,但是目前该文档明确指出其状态为“已过时”:
class name
css selector
id
name
link text
partial link text
tag name
xpath
定位器策略
更改通过相应的客户端特定绑定传播。对于Selenium-Java客户,这是客户代码,我们在其中为用户提供开关柜:
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。根据#1042,WebDriver贡献者的回答很简单:
This keeps the specification simple as these can be implemented using the CSS selector, which maps down to querySelector/querySelectorAll.
This keeps the specification simple as these can be implemented using the CSS selector, which maps down to querySelector/querySelectorAll