【问题标题】:Configure Selenium to drive Safari in Private mode配置 Selenium 以在私有模式下驱动 Safari
【发布时间】:2015-08-01 17:44:30
【问题描述】:

如何配置 Selenium 以在私有模式下驱动 Safari? (我使用的是 Ruby 界面)。

就上下文而言,这就是为什么在 Safari 的私有模式下运行测试很重要的原因:尝试写入本地存储会在 Safari 的私有模式下引发错误。因此,我想要验证我的代码在私有模式下避免写入本地存储的自动化测试。 (而且,也许更重要的是,会引起开发人员注意未来的错误

【问题讨论】:

  • 你不能在正常模式下运行测试,然后使用 ruby​​ 中的普通文件 I/O 检查本地存储中是否有任何内容 - 忘记 Selenium?
  • 页面的正常操作是在本地存储中保存一些数据。因此,如果用户在私人模式下使用 Safari 访问页面,JavaScript 会崩溃。我想要一个自动化测试(想想 CI)来验证页面是否在 Safari 的私有模式下工作。自动化部分很重要,因此如果一年后,另一个开发人员忘记了您在隐私浏览模式下无法写入本地存储,那么自动化测试就会发现疏忽。
  • 另外,为了澄清,“本地存储”是指 HTML5 本地存储 (w3schools.com/html/html5_webstorage.asp),而不是本地文件系统上的文件。

标签: javascript ruby selenium safari incognito-mode


【解决方案1】:

让我们看一下隐私浏览的定义: https://support.apple.com/kb/PH19216?locale=en_US

当您使用无痕浏览窗口时,Safari 不会保存您的浏览历史记录,并且会要求您访问的网站不要跟踪您。

在这里:http://en.wikipedia.org/wiki/Privacy_mode

隐私模式或“隐私浏览”或“隐身模式”[1] 是某些网络浏览器中的一项隐私功能,用于禁用浏览历史记录和网络缓存。这允许人们在不存储可以在以后检索的本地数据的情况下浏览 Web。隐私模式还将禁用 cookie 和 Flash cookie 中的数据存储。这种隐私保护仅在本地计算设备上,因为仍然可以通过关联网络服务器上的 IP 地址来识别经常访问的网站。

所以这意味着 Selenium 相当于开启了隐私浏览。每次您通过 Selenium 启动任何驱动程序时,它都会创建一个全新的匿名配置文件,您实际上是在私下浏览。 (如果您不使用已创建的 safari 配置文件)

但是!如果您仍然认为需要在隐身模式下运行 safari,可以使用以下 hack:

您可以使用 AppleScript 自动执行启用隐私浏览选项的过程。像这样。

  1. 首先,启动通用访问系统首选项并启用启用辅助设备访问选项。

  2. 启动脚本编辑器(在 Applications 文件夹内的 AppleScript 文件夹中)并输入以下脚本:

tell application "Safari"
  activate
end tell

tell application "System Events"
  tell process "Safari"
      tell menu bar 1
          tell menu bar item "Safari"
              tell menu "Safari"
                  click menu item "Private Browsing"
              end tell
          end tell
      end tell
  end tell
end tell

来自这里的信息:http://www.macworld.com/article/1139714/enableprivatebrowsing.html

【讨论】:

  • 脚本很有帮助,谢谢。现在,如何将它应用于由 selenium 驱动的特定 Safari 实例?
  • Selenium 不等同于开启隐私浏览。如果我在 Safari 中打开隐私浏览,那么这行 JavaScript 将抛出 QuotaExceededError: 'localStorage.setItem("key", "value")'。这不会仅仅通过使用 Selenium 来实现。
  • QuotaExceededError 显示为浏览器本地保存信息失败。在 selenium 的情况下 - 项目不会被保存,不是因为它们被浏览器阻止,而是因为它们将在下一个会话开始之前被 selenium 删除。所以在某种意义上它们是等价的——因为这些数据不会在下一个会话中使用。如果您仍然需要完全在隐身模式下运行,我认为可以更改上面的脚本以针对某些特定配置文件运行隐身模式。在这种情况下,您将需要创建此配置文件并在 selenium 启动时使用它。
  • 添加一个事实,当您使用 SafariDriver 时,只需导航到您已登录的任何页面,仍然会登录。隐私浏览将在绝对没有会话信息的情况下启动。这就是让我想到这个问题的原因。
猜你喜欢
  • 1970-01-01
  • 2015-02-10
  • 2021-05-19
  • 2020-05-17
  • 2017-09-07
  • 2019-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多