Selenium 原子¶
Marionette 使用一个小的 Selenium 原子 列表来与 Web 元素进行交互。最初添加这些是为了确保更好的可靠性,因为 Selenium 项目内部广泛使用了它们。但是通过添加对 WebDriver 规范 的全面支持,它们将逐步被移除。
当前正在使用以下原子
getElementText
isElementDisplayed
要使用其中一个原子,Javascript 模块必须导入 atom.sys.mjs。
更新所需的 Selenium 原子¶
定期需要更新仍在使用的原子。因此,首先必须从 Selenium 存储库中导出它们,然后在 atom.sys.mjs 中更新它们。
导出 Selenium 原子¶
Selenium 的规范 GitHub 存储库是
https://github.com/SeleniumHQ/selenium.git
因此,请确保拥有其最新的本地副本。如果必须先克隆它,建议指定 --depth=1
参数,以便仅下载最新的更改集(它本身可能已经超过 100 MB)。
git clone --depth=1 https://github.com/SeleniumHQ/selenium.git
要导出正确版本的原子,请在 WebDriver 规范的 索引部分 中识别 Selenium 存储库的更改集 ID (SHA1)。
获取该更改集并检出它
git fetch --depth=1 origin SHA1
git checkout SHA1
现在,您可以通过运行以下命令导出所有所需的原子。请确保首先 安装 bazelisk。
bazel build //javascript/atoms/fragments:get-text
bazel build //javascript/atoms/fragments:is-displayed
对于每个导出的原子,现在可以在 bazel-bin/javascript/atoms/fragments/
文件夹中找到一个文件。它们包含所有代码,包括包装到单个函数中的原子的依赖项。
更新 atom.sys.mjs¶
要更新 Marionette 的原子,必须编辑 atoms.js
文件。对于要更新的每个原子,必须执行如下所述的步骤
打开导出的原子的 Javascript 文件。请参阅上面有关其位置的信息。
将相关的函数名称和
element
作为参数添加到包装函数中,该函数可以在文件的开头找到,以便它与atom.sys.mjs
中的参数相同。将文件的全部内容复制并粘贴到 https://jsonformatter.org/json-stringify-online 上的左侧文本区域,以获取所有所需函数的字符串化版本。
复制并粘贴右侧文本区域的全部内容,并替换
atom.sys.mjs
中原子的现有代码。
测试更改¶
为了确保原子的更新不会导致回归,应该运行一个尝试构建,其中包括 Marionette 单元测试、Firefox UI 测试和所有 web-platform-tests。