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 文件。对于要更新的每个原子,必须执行如下所述的步骤

  1. 打开导出的原子的 Javascript 文件。请参阅上面有关其位置的信息。

  2. 将相关的函数名称和 element 作为参数添加到包装函数中,该函数可以在文件的开头找到,以便它与 atom.sys.mjs 中的参数相同。

  3. 将文件的全部内容复制并粘贴到 https://jsonformatter.org/json-stringify-online 上的左侧文本区域,以获取所有所需函数的字符串化版本。

  4. 复制并粘贴右侧文本区域的全部内容,并替换 atom.sys.mjs 中原子的现有代码。

测试更改

为了确保原子的更新不会导致回归,应该运行一个尝试构建,其中包括 Marionette 单元测试、Firefox UI 测试和所有 web-platform-tests。