在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
征募情况如下:
"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客户,这是客户代码,我们在其中为用户提供开关柜:
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
.
在官方的W3c webdirver文档中,明确说明了定位策略是: 然而,Selenium的有线协议允许: 现在:我知道一般的答案,其中“规格并不总是100%遵守”等等。但是,我想知道的是: 你能在Chromium中找到实现这一点的代码吗?(非常欢迎链接) 在Chromium邮件列表中是否讨论过这些内容? “非官方”命令(记录在“旧”selenium规范文件中)是否可能保留?你从哪里读到的?
与Selenium IDE一样,WebDriver使用相同的定位策略集来指定特定Web元素的位置。 因为,正在使用带有Java的WebDriver; 每个定位策略在Java中都有自己的命令来定位Web元素。 注意 :在和方法的帮助下,在Webdriver中定位Web元素。 WebDriver中使用的定位策略列表: 按ID定位策略 按名称查找策略 按类名定位策略 按标签名称定位策略 通过链接文本定位
对于大多数Selenium命令,都需要一个目标位置,该位置在Web应用程序的上下文中唯一地定义Web元素。 目标由定位策略组成,其格式如下: 在Selenium IDE中,目标使用六种指定特定Web元素位置的模式: 按标识符定位 按ID元素定位 按名称查找 通过XPath定位 通过CSS定位 按DOM定位 在详细介绍每种模式之前,读者应该精通HTML和CSS。
我正在尝试定位一个下拉列表并从中选择一个选项,但是我无法定位下拉列表,因为没有id,名称,或任何明显的其他定位器来访问它。 我甚至尝试过使用xpath,我唯一的成功是单击下拉菜单并打开列表,但我无法从中选择任何项目。 我甚至尝试了类似的操作:String metric=“html/body/div[3]/div[2]/form/div/table/tbody/tr1/td[2]/div/a”;单击
我正在使用webDrive来测试我们包含表的应用程序,用户可以在其中更改表中列的顺序,还可以删除/添加列(这是开发人员添加的新列旁边)。 找到我需要的列的正确方法是什么?一种方法是遍历表头以找到我要查找的列,这样我就有了列索引并且可以访问正确的单元格。 还有别的办法吗?为表中的每个元素放置唯一的id/类名怎么样? 谢啦
问题内容: 我正在学习 Selenium Webdriver, 并尝试编写一个简单的测试脚本。 目的是在 Gmail 页面上获取链接,以便练习 CSS定位器 。 这是代码: 我得到以下提到的异常: 我检查了一下,并使用相同的定位器找到了Selenium IDE中的元素。 我在某处读到该方法正在返回DOM节点,并且代码期望使用WebElement对象。 如果是这种情况,是否有解决方法/广播? 有什么