Official locator strategies for the webdriver(webdriver的官方定位器策略)
问题描述
在
但是,
更改通过各自的客户端特定绑定传播.对于 Selenium-Java
客户端,这里是
现在,您的问题一定是为什么 W3C Specs
和 clients
会发生这种变化.根据 #1042 WebDriver Contributors 的回答很漂亮直接作为:
这使规范保持简单,因为这些可以使用 CSS 选择器来实现,它映射到 querySelector/querySelectorAll.
In the official W3c webdirver documentation, it's clearly stated that the location strategies are:
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"
However, Selenium's wire protocol allowed:
class name
css selector
id
name
link text
partial link text
tag name
xpath
In THEORY, Selenium's docs are obsolete and the "real" story is in the new spec document. However...
I ran some tests on the latest Chrome's own Webdriver, and I can confirm that name
and class name
both work; however, they are not in the specs.
I remember reading on a Chromium issue that they would only ever implement the official Webdriver specs.
Now: I know the generic answer, where "specs are not always followed 100%" etc. However, what I'd like to know is:
- Can you find the code in Chromium that implements this? (link would be most welcome)
- Have there been discussions about these in the Chromium mailing list?
- Are the "unofficial" commands (which are documented in the "old" selenium specs file) likely to stay? Where did you read so?
Yes, you saw it right.
As per the current WebDriver - W3C Candidate Recommendation
the Locator Strategies
enlisted are as follows :
"css selector"
: CSS selector"link text"
: Link text selector"partial link text"
: Partial link text selector"tag name"
: Tag name"xpath"
: XPath selector
Snapshot :
However, the JsonWireProtocol
was once used to support the Locator Strategies enlisted below but currently the documentation clearly states it's Status as OBSOLETE :
class name
: Returns an element whose class name contains the search value; compound class names are not permitted.css selector
: Returns an element matching a CSS selector.id
: Returns an element whose ID attribute matches the search value.name
: Returns an element whose NAME attribute matches the search value.link text
: Returns an anchor element whose visible text matches the search value.partial link text
: Returns an anchor element whose visible text partially matches the search value.tag name
: Returns an element whose tag name matches the search value.xpath
: Returns an element matching an XPath expression. The provided XPath expression must be applied to the server "as is"; if the expression is not relative to the element root, the server should not modify it. Consequently, an XPath query may return elements not contained in the root element's subtree.
Snapshot :
The change was propagated through the respective client specific bindings. For the Selenium-Java
clients here is the client code where we have the switchcase working for the users :
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;
Snapshot :
Now, your question must be why this change in the W3C Specs
and in the clients
. As per #1042 the Answer from the WebDriver Contributors was pretty straight as :
This keeps the specification simple as these can be implemented using the CSS selector, which maps down to querySelector/querySelectorAll.
这篇关于webdriver的官方定位器策略的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:webdriver的官方定位器策略
- 我不能使用 json 使用 react 向我的 web api 发出 Post 请求 2022-01-01
- 在不使用循环的情况下查找数字数组中的一项 2022-01-01
- 如何调试 CSS/Javascript 悬停问题 2022-01-01
- 使用 iframe URL 的 jQuery UI 对话框 2022-01-01
- 为什么我的页面无法在 Github 上加载? 2022-01-01
- 是否可以将标志传递给 Gulp 以使其以不同的方式 2022-01-01
- 从原点悬停时触发 translateY() 2022-01-01
- 如何向 ipc 渲染器发送添加回调 2022-01-01
- 如何显示带有换行符的文本标签? 2022-01-01
- 为什么悬停在委托事件处理程序中不起作用? 2022-01-01