Chrome webdriver的官方定位器策略

v64noz0r  于 12个月前  发布在  Go
关注(0)|答案(1)|浏览(142)

在官方的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's wire protocol允许:

class name
css selector
id
name
link text
partial link text
tag name
xpath


在理论上,Selenium的文档已经过时了,“真实的”故事在新的规范文档中。然而.
我在最新的Chrome自己的Webdriver上运行了一些测试,我可以确认nameclass name都可以工作;但是,它们不在规范中。
我记得阅读关于Chromium的问题,他们只会实现官方的Webdriver规范。
现在:我 * 知道 * 一般的答案,其中“规格并不总是遵循100%",等等。但是,我想知道:

  • 你能在Chromium中找到实现这一点的代码吗?(最欢迎提供链接)
  • 在Chromium邮件列表中有关于这些的讨论吗?
  • 那些“非官方”的命令(记录在“旧的”Selenium规范文件中)可能会保留下来吗?证据在哪里?
4xrmg8kj

4xrmg8kj1#

是的,你没看错。
根据当前的 *WebDriver - W3C候选建议 WebDriver策略 * 如下:

    • “css selector”*:CSS selector
    • “link text”*:链接文本选择器
    • “partial link text”*:部分链接文本选择器
    • “标签名称”*:标签名称
    • “xpath”*:路径选择器

快照:
x1c 0d1x的数据
然而,JsonWireProtocol 曾经被用来支持下面列出的 * JsonStrategies *,但目前文档明确指出其 Statusobsolete

  • class name:返回类名包含搜索值的元素;不允许使用复合类名。
  • css selector:返回一个与CSS selector匹配的元素。
  • id:返回ID属性与搜索值匹配的元素。
  • name:返回NAME属性与搜索值匹配的元素。
  • link text:返回一个锚元素,其可见文本与搜索值匹配。
  • partial link text:返回一个锚元素,其可见文本部分匹配搜索值。
    • tagname *:返回一个元素,其标签名与搜索值匹配。
  • xpath:返回一个与根元素表达式匹配的元素。所提供的根元素表达式必须“按原样”应用于服务器;如果该表达式与根元素无关,则服务器不应修改它。因此,根元素的子树中可能不包含根元素查询返回的元素。

快照:



更改通过相应的 * 客户端 * 特定绑定传播。对于 Selenium-Java 客户端,这里是我们为用户提供switch案例的客户端代码:

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规范 * 和 * 客户端 * 中发生了这种变化。根据#1042,来自 *WebDriver贡献者 * 的 * 答案 * 非常直接:
这使规范保持简单,因为这些可以使用CSS选择器来实现,该选择器Map到querySelector/querySelectorAll。

相关问题