webdriver 的官方定位器策略

2023-11-27

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选择器

快照:

Locator Strategies

但是,那JsonWire协议曾经被用来支持定位策略下面列出了,但目前文档清楚地说明了其Status as obsolete:

  • 班级名称:返回类名包含搜索值的元素;不允许使用复合类名。
  • CSS选择器:返回与 CSS 选择器匹配的元素。
  • id:返回ID属性与搜索值匹配的元素。
  • name:返回 NAME 属性与搜索值匹配的元素。
  • 链接文本:返回可见文本与搜索值匹配的锚元素。
  • 部分链接文本:返回可见文本与搜索值部分匹配的锚元素。
  • tag name:返回标签名称与搜索值匹配的元素。
  • xpath:返回与 XPath 表达式匹配的元素。提供的 XPath 表达式必须“按原样”应用于服务器;如果表达式与元素根无关,则服务器不应修改它。因此,XPath 查询可能返回不包含在根元素的子树中的元素。

快照:

Locator Strategies

这一变化是通过各自的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;

快照:

JAVA_classname_id_name_tagname

现在,您的问题一定是为什么会发生这种变化W3C规范并在clients。按照#1042 the answer来自WebDriver 贡献者非常直接:

这使得规范变得简单,因为这些可以使用 CSS 选择器来实现,该选择器映射到 querySelector/querySelectorAll。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

webdriver 的官方定位器策略 的相关文章

  • Google Maps API v3:在 Firefox 中未触发自定义标记的点击事件

    创建了一个地图 我试图使其具有类似于 我的地图 的功能 我的右侧有两个下拉列表 根据这些 ddl 中的选择 您可以添加自定义标记 图标 您选择标记类型 然后单击地图右上角的 按钮 然后单击要添加标记的位置 我的问题是 这在 IE Safar
  • 如何使用Vue3中的ref访问父组件中的子组件方法?

    我正在尝试使用 vue3 和 ref 方法访问父组件中的子方法 但它返回一个错误 未捕获的类型错误 addNewPaper value savePaper 不是函数 下面是我的代码 请指导我哪里错了 子组件
  • 固定长度的随机数

    我想生成一个 0 9 数字且长度 5 的随机整数 我尝试这样做 function genRand min max for var i 1 i lt 5 i var range max min 1 return Math floor Math
  • 无限水平滚动 Div

    我需要一个 div 当您将鼠标进一步向右或向左移动时 它会水平滚动 我发现 Smooth Div Scroll 插件 http www smoothdivscroll com 非常接近我的需要 然而 这存在一些问题 我需要能够使滚动元素从设
  • Typescript:如何在 Redux 中输入 Dispatch

    例如我想删除dispatch any here export const fetchAllAssets gt dispatch any gt dispatch actionGetAllAssets return fetchAll getPr
  • For 循环覆盖 HTML 中的文本

    我的数组称为myEmployees其中有 5 个名字 但当我运行代码时 它只打印出其中的 3 个 我相信这种情况正在发生 因为for脚本中的循环会覆盖它在 HTML 文档中编写的前一行 我怎样才能解决这个问题 年度公告板公告 恭喜泰勒 你在
  • jQuery:在 jQuery 对象中存储附加/额外的数据/信息?

    在 jQuery 对象中存储额外的数据是否可能且明智 现在我有包含一些数据的对象 但这些对象也有该数据的视觉表示 这可行 但我有很多代码来保持它们同步 例如 如果您从 dom 中删除一个对象 我还必须从对象数组中删除相关对象 删除相当简单
  • 如何连接我的 angular2 应用程序 javascript 文件

    对于我的 Angular2 TypeScript 应用程序 我将所有 js 文件合并到一个 app min js 文件中 然后 System import 将此文件导入到我的 index html 页面 然后我得到一个同一模块文件中的多个匿
  • javaScript从单个值数组返回一个新的成对值数组[重复]

    这个问题在这里已经有答案了 可能的重复 将数组分割成块 https stackoverflow com questions 8495687 split array into chunks 我正在尝试将值数组转换为新的配对值数组 例如我需要转
  • 解密签名并验证 JWT

    我知道还有其他库可以让我更轻松地使用 JWT 在 Node js 中 在本例中 我使用 crypto js 以手动方式学习 JWT 以下给了我令牌 var header alg HS256 typ JWT var wordArrayHead
  • 将 Blob 设置为 iframe 的“src”

    以下代码在 Chrome 中完美运行 但它不适用于 IE 有人可以告诉我这里出了什么问题吗 iframe src 也设置为 blob 如下所示
  • 获取与请求

    我正在使用 JSON 流并尝试使用 fetch 来使用它 该流每隔几秒发出一些数据 仅当流关闭服务器端时 使用 fetch 来使用流才可以访问数据 例如 var target the url var options method POST
  • JavaScript:String 和 Array 上的 indexOf 方法的效率差异

    我很好奇效率是否存在差异indexOf两者都可用的方法Array and String在 JavaScript 中 我以为indexOf在 String 上的效率低于在 Array 上的效率 而我的new测试结果支持了这一点 例如 var
  • 我想在使用 Jest Snapshots 时获得图像文件名/路径

    我已经开始使用Jest https facebook github io jest 在一个新项目中有很多 我现在正在使用Snapshot https facebook github io jest docs tutorial react h
  • Google 脚本过滤一个值的范围

    我想过滤第 1 列中仅包含 Bob 特定值的行的 google 工作表范围 到目前为止 我的代码允许我过滤out第 1 列中有 Bob 的行 我需要相反 我想返回第 1 列中只有 Bob 的行 因此 其中 filterSettings 不是
  • PhoneGap文件传输错误1、哪里写FileTransfers?

    相关 https stackoverflow com questions 21044197 download file and store them locally in sdcard using phonegapbuild https s
  • Javascript变量是一个对象数组,但无法访问元素

    我正在使用 Firebase 数据库和 Javascript 并且我有代码可以获取每个类别中的每个问题 我有一个名为 类别 的对象 其中包含名称 问题和问题计数 然后它将被推入类别列表 questionsPerCategory 在我刚刚做的
  • 有没有办法避开 Google 路线中的特定道路或坐标?

    API 有一个航路点参数 以便 API 计算经过指定航路点的路线 有什么方法可以给出要避开的航路点而不是要经过的航路点 它 目前 尚未实施 有一个开放的功能请求 问题 214 影响方向的能力 例如 避免 路障 https code goog
  • 所有区域的启用保护模式必须设置为相同的值(启用或禁用)

    我正在尝试使用Selenium Internet Explorer驱动程序 但当我尝试实例化它时它崩溃了 TestInitialize public void TestInitialise ieDriver new InternetExpl
  • axios在自调用函数内部只调用一次(Internet Explorer)

    我有一个函数每 2 5 秒调用自己一次来检查后台运行的任务 它调用 axiosget如果响应错误 则返回一个 url 如果响应成功 我将停止该函数 这在 Chrome 和 Mozilla 上完美运行 但由于某种原因 它在 IE 版本 11

随机推荐

  • 如何让“git log”显示“svn log -v”等文件名

    SVN 的日志有一个 v 模式 它输出每次提交中更改的文件的文件名 如下所示 jes5199 svn log v r1 jes5199 2007 01 03 14 39 41 0800 Wed 03 Jan 2007 1 line Chan
  • 我可以在 iOS 的 Core Text 中使用 NSAttributedString 吗?

    我正在尝试弄清楚如何获取 NSAttributedString 并在 iPad 上的 Core Text 中使用它 我观看了 WWDC 视频 110 之一 其中有幻灯片 但没有源代码 它描述了如何创建 NSAttributedString
  • 如何在 PHP 中使用 Word Net

    如何在 php 中使用 word Net 是否有任何接口或任何类 我需要使用 wordnet 来实现我的词典目的 在下载页面上可以使用命令行工具进行下载 如果你启用了 exec 你可以从 php 使用它 http wordnet princ
  • 与 Qt 静态链接的应用程序出现错误:无法加载平台插件“windows”

    我已经在 Windows 7 x64 下的 VS 2010 中静态构建了 Qt 5 0 1 配置参数是 configure debug and release opensource confirm license platform win3
  • 使用 Jackson JSON 视图而不注释原始 bean 类

    有什么方法可以使用 Jackson JSON Views 或类似的东西 而不必注释原始 bean 类 我正在寻找某种运行时 动态配置来让我做类似的事情 我的豆子是一个 Entity打包在可由多个项目共享的 JAR 中 由于使用项目中的 UI
  • pandas sort_values 函数中 axis=1 的含义是什么? [复制]

    这个问题在这里已经有答案了 我有以下代码片段 df pd DataFrame col1 A A B np nan D C col2 2 1 9 8 7 4 col3 0 1 9 4 2 3 print df sorted df sort v
  • 如何使用 Delphi 7 将文本文件从 ANSI 转换为 UTF-8?

    我用 Delphi 7 编写了一个程序来搜索 srt硬盘上的文件 该程序在备忘录中列出这些文件的路径和名称 现在我需要将这些文件从 ANSI 转换为 UTF 8 但我还没有成功 Utf8Encode 函数采用 WideString 字符串作
  • 创建 ruby​​ C++ 扩展

    我使用 C 类创建了一个示例 ruby 扩展 当我没有解析该值时它工作正常 但是当我解析参数时它显示错误 这是我的代码 C 头文件 ifndef CIRCLE H define CIRCLE H class Circle public Ci
  • R 中的桑基图

    尝试在 R 的帮助下制作一个相当通用的桑基图networkD3包裹 仅供参考 这是软件包手册中的示例 library networkD3 library jsonlite library magrittr energy lt https c
  • 从 AngularJS Web 应用程序发送电子邮件

    在我的一个 AngularJS Web 应用程序中 我需要通过向相关人员发送电子邮件来确认密码 我怎样才能在 AngularJS 中实现这一点 我是一名 NET 人员 我正在使用 Visual Studio 2013 您还可以考虑使用第三方
  • WPF 子控件的鼠标悬停触发效果

    假设我有这段代码
  • 我的网站的移动版,什么设计宽度是最佳的? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我要创建移动版本的网站 设计时应该选择什么宽度 我知道每个设备都有自己的屏幕宽度 并且很难适应所有设备 我真的很困惑 对移动网站世界来说相当陌生 请帮忙 谢谢 您的方法将取决于您想要 或可
  • Node.js 有模板引擎吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我正在尝试使用 Node
  • 删除 iOS UIBarButtonItem 的标题文本

    我想做的是从 后退 按钮中删除文本UIBarButtonItem 在导航栏上只留下蓝色 V 形 请记住 我正在针对 iOS 7 进行开发 我尝试了多种方法 包括但不限于 这是我不喜欢的图像方法 图像看起来不合适 UIBarButtonIte
  • 在 jupyter 中使用带有 bash 魔法的 python 变量

    我想使用 jupyter 笔记本中运行 bash 命令 bash魔术命令并传递 python 变量 如中所述这个帖子我可以这样做 bash s foo bar cp 1 2 这很好用 然而 当我有一堆这些变量并且 bash 命令很长时 使用
  • MediaRecorder 启动失败:-38

    我搜索了一下这个问题是否没有重复 我看到有些没有答案 有些没有帮助 这是我的代码 private void startRecording mRecorder new MediaRecorder mRecorder setAudioSourc
  • 如何捕获 printf 的输出?

    我正在调用一个函数funcB from funcA funcB使用几个printf语句来输出数据 有没有办法让我通过捕获该数据funcA 我无法修改funcB funcB printf s My Name is printf s I lik
  • 自动重构工具可以找到类似的 Java/Javascript 重复源代码吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在寻找一个工具来查找重复或similarJava Javascript 代码 我无法说出 的确切定义 similar 但我希望该工具足够智能 并
  • Elasticsearch在php中匹配子字符串

    下面给出的是我使用elasticsearch生成索引的代码 索引已成功生成 基本上我用它来根据电影名称 演员名称和基因生成自动建议 现在我的要求是 我需要将子字符串与特定字段相匹配 如果我使用 这工作正常 params body query
  • webdriver 的官方定位器策略

    In the 官方 W3C Webdriver 文档 明确指出了位置策略是 State Keyword CSS selector css selector Link text selector link text Partial link