Selenium 和 Service Worker 离线模式
Posted
技术标签:
【中文标题】Selenium 和 Service Worker 离线模式【英文标题】:Selenium and Service Workers offline mode 【发布时间】:2021-01-23 05:46:55 【问题描述】:我在 chrome 上使用网络限制来关闭互联网连接进行了测试。我正在测试SPA。 从 85 版本的 Chrome 开始,这些测试因打开连接而失败。 有人知道这个损坏功能的解决方法吗?
使用此代码关闭连接:
self.driver.set_network_conditions(
latency=0,
offline=True,
download_throughput=500 * 1024,
upload_throughput=500 * 1024)
UPD:当我取消注册服务工作者时,我发现 chrome 开发工具连接丢失。
所以,我的 SPA 使用 service worker 作为请求的代理。这就是为什么 set_network_conditions() 不会关闭连接的原因。但是,对于所有其他 url,没有连接。 I found my issue here.
【问题讨论】:
我刚刚尝试了您的 sniplet,效果很好,我的浏览器离线了。将offline
标志设置为False
后连接恢复正常。也许你的测试比我做的更复杂:)
你说得对。我发现,只有经过测试的站点连接才不会丢失。但是,当我使用 chrome 开发工具取消注册服务人员时,连接会丢失。
【参考方案1】:
也许使用代理?
PROXY = "12.345.678.910:8080" -- Fake address
chrome_options = WebDriverWait.ChromeOptions()
chrome_options.add_argument('--proxy-server=%s' % PROXY)
你只需要设置一个不存在的代理地址
//编辑 您已经提到您必须模拟在测试中间丢失的连接。尽管如此,我认为代理是唯一的解决方案。步骤:
1. Init and run local proxy server in your test
2. Run WebDriver with the reference to running proxy server created in step 1.
3. Perform online steps
4. Stop ProxyServer
5. Perform offline steps
关于代理的更多信息:https://wonderproxy.com/blog/a-step-by-step-guide-to-setting-up-a-proxy-in-selenium/
【讨论】:
它可以帮助在没有网络连接的情况下打开浏览器。但是,在我的情况下,我需要在测试用例执行过程中模拟网络连接丢失。之前它对我来说很完美。 您能否在 set_network_conditions() 调用后检查网络条件是否设置正确? http 获取请求 http://remoteWebDriverAddress/session/sessionId/chromium/network_conditions 条件设置正确。我正在使用 get_network_conditions() 方法进行检查。 好的,这显然是 ChromeDriver 的问题 :((( 绝对,你应该报告它bugs.chromium.org/p/chromedriver/issues/list?sort=-id 我认为代理是唯一的解决方案 - 我已经添加了如何在测试执行期间实现连接丢失的想法以上是关于Selenium 和 Service Worker 离线模式的主要内容,如果未能解决你的问题,请参考以下文章
一句话总结Web worker,Service worker和worklet