使用 selenium 时禁用 Safari 中的自动警告

Disable automation warning in Safari when using selenium

我想在 safari 中使用 selenium 进行测试。

不幸的是,当我尝试使用 safari 调试问题时,会出现一条通知,要求我在 safari 中禁用自动化或退出(附图)。

为什么我不能像在 Chrome 和 FireFox 中那样做(例如:按 F12 查看 DOM)?

Note: I'm using MacOs Catalina with Javascript & Python for selenium

这应该可以解决您的问题。

warnFromSafari = driver.SwitchTo().Alert();

warnFromSafari.Accept();

这个错误信息...

...表示 Safari 浏览器 对开发人员和自动化开发人员的支持默认 关闭


配置 Safari 以启用 WebDriver 支持

根据 Testing with WebDriver in Safari 中的文档,默认关闭 Safari 对开发人员的 WebDriver 支持。启用 WebDriver 支持取决于您的操作系统。

  • 在 High Sierra 及之后:

    • 您需要启用一次safaridriver。

      /usr/bin/safaridriver --enable
      
    • 如果您是从以前的 macOS 版本升级,您可能需要使用 sudo,如下所示:

      sudo /usr/bin/safaridriver --enable 
      
  • Sierra 及更早版本:

    1. 使“开发”菜单可用。选择 Safari > Preferences,然后在 Advanced 选项卡上,菜单栏中的 select Show Develop menu
    2. 选择 Develop > Allow Remote Automation
    3. 授权 safaridriver 启动托管本地网络服务器的 XPC 服务。要允许此操作,请手动 运行 /usr/bin/safaridriver 一次并按照身份验证提示进行操作。

不幸的是,我们似乎无法暂停测试,与浏览器交互,然后使用 safaridriver 恢复测试,就像我们使用 geckodriver 和 chrome webdriver 一样。 最接近的选项是屏幕截图弹出窗口中的 'Stop Session'。

据我所知,列出的 3 个选项是:

关闭所有自动化 - 停止测试并关闭所有自动化设置。这将要求您再次允许远程 automation/enable safaridriver。

停止会话 - 这会停止测试但让浏览器保持打开状态,以便您可以手动与其交互并使用 Web Inspector 工具。

继续会话 - 这将关闭弹出窗口并继续测试。

所以,总结一下遇到#Safari 并尝试自动化它的所有其他(沮丧的)开发人员。由于这个限制,不可能编写自动化。

所以选项是:

  1. 在其他浏览器(例如chrome)中写入并验证它在 safari 中是否有效
  2. 在 safari 的其他会话中手动(手动)找到您的 locators/paths 然后插入到您的 automation-infra

并增加了复杂性 - Selenium 点击在许多地方不起作用,而在 chrome/ff/edge 上确实有效。 因此,可能的解决方案是在 DOM 中使用 JS - 但这也不完美。

希望情况会有所改善