当前位置: 首页 > 面试题库 >

Webdriver的官方定位器策略

姜业
2023-03-14
问题内容

在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%”等。但是,我想知道的是:

  • 您可以在Chromium中找到实现此功能的代码吗?(欢迎链接)
  • Chromium邮件列表中是否有关于这些的讨论?
  • “非官方”命令(在“旧”硒规范文件中有记录)是否有可能保留?你在哪里读的?

问题答案:

是的,您看对了。

根据目前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对象。 如果是这种情况,是否有解决方法/广播? 有什么