In the 官方 W3C Webdriver 文档,明确指出了位置策略是:
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
In theory,Selenium 的文档已过时,“真实”的故事在新的规范文档中。然而...
我在最新的 Chrome 自己的 Webdriver 上运行了一些测试,我可以确认name
and class name
两者都有效;但是,它们不在规格中。
我记得在 Chromium 问题上读过,他们只会实现官方的 Webdriver 规范。
Now: I know通用答案,其中“规格并不总是 100% 遵循”等。但是,我想知道:
- 你能在 Chromium 中找到实现这个功能的代码吗? (非常欢迎链接)
- Chromium 邮件列表中是否有过关于这些的讨论?
- “非官方”命令(记录在“旧”Selenium 规范文件中)是否可能保留?证据在哪里?
是的,你没看错。
按照目前的WebDriver - W3C 候选推荐 the 定位策略入伍名单如下:
-
“CSS选择器”:CSS选择器
-
“链接文字”:链接文本选择器
-
“部分链接文本”:部分链接文本选择器
-
“标签名”: 标签名
-
"xpath":XPath选择器
快照:
但是,那JsonWire协议曾经被用来支持定位策略下面列出了,但目前文档清楚地说明了其Status as obsolete:
-
班级名称:返回类名包含搜索值的元素;不允许使用复合类名。
-
CSS选择器:返回与 CSS 选择器匹配的元素。
-
id:返回ID属性与搜索值匹配的元素。
-
name:返回 NAME 属性与搜索值匹配的元素。
-
链接文本:返回可见文本与搜索值匹配的锚元素。
-
部分链接文本:返回可见文本与搜索值部分匹配的锚元素。
-
tag name:返回标签名称与搜索值匹配的元素。
-
xpath:返回与 XPath 表达式匹配的元素。提供的 XPath 表达式必须“按原样”应用于服务器;如果表达式与元素根无关,则服务器不应修改它。因此,XPath 查询可能返回不包含在根元素的子树中的元素。
快照:
这一变化是通过各自的client- 特定的绑定。为了硒-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规范并在clients。按照#1042 the answer来自WebDriver 贡献者非常直接:
这使得规范变得简单,因为这些可以使用 CSS 选择器来实现,该选择器映射到 querySelector/querySelectorAll。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)