cen*_*all 4 ruby selenium network-programming google-chrome browser-automation
我是一名质量检查自动化分析师,负责测试多平台在线银行应用程序。对于我们的自动化测试,我们将RubyMine套件与Gherkin / Cucumber,Ruby脚本步骤以及Selenium-webdriver,Watir和页面对象gem /库一起使用。
我有很多脚本,如果没有人工干预就无法完全自动化,其中包括通过Telerik Fiddler阻止某些网络调用以生成警告页面或错误消息等。我们自动化的未来将是通过RubyMine而不是Fiddler来实现。用于网络阻止。我知道有一种方法可以在Chrome中使用Inspect Element和“网络”菜单中的启用请求阻止功能来执行此操作。但是,我无法找到一种方法来强制Chrome浏览器通过Ruby / Selenium阻止给定的请求。唯一的方法是自己手动执行操作,因此我实际上无法根据需要自动执行这些操作。
所以,我的问题-这是否有可能使用Selenium-webdriver自动执行请求阻止?而且,如果是这样,我应该从哪里开始寻求帮助?
谢谢。
它没有很好的文档记录,但您也可以通过将 host-resolver-rules 选项传递给 chrome 并将域映射到 localhost 或无效 IP 来实现请求阻塞。这样的事情应该适合你:
options = Selenium::WebDriver::Chrome::Options.new
options.add_argument('--host-resolver-rules=MAP www.google-analytics.com 127.0.0.1')
driver = Selenium::WebDriver.for :chrome, options: options
Run Code Online (Sandbox Code Playgroud)
对于那些想知道的人来说,python 版本只是:
driver.execute_cdp_cmd('Network.setBlockedURLs', {"urls": ["www.baidu.com"]})
driver.execute_cdp_cmd('Network.enable', {})
Run Code Online (Sandbox Code Playgroud)
要使用DevTool API阻止URL使用Selenium加载:
def send_cmd(driver, cmd, params={})
bridge = driver.send(:bridge)
resource = "session/#{bridge.session_id}/chromium/send_command_and_get_result"
response = bridge.http.call(:post, resource, {'cmd':cmd, 'params': params})
raise response[:value] if response[:status]
return response[:value]
end
send_cmd(driver, "Network.setBlockedURLs", {'urls': ["*"]})
send_cmd(driver, "Network.enable")
Run Code Online (Sandbox Code Playgroud)
尝试https://github.com/lightbody/browsermob-proxy
我不知道它是否可以满足您的要求,因为我不是网络专家,我确实广泛使用 browsermob-proxy 和 selenium 来捕获网络请求,并且有一种方法可以将某些请求列入黑名单
https://browsermob-proxy-py.readthedocs.io/en/stable/client.html#browsermobproxy.Client.blacklist
如何禁用在 seleniumlibrary/robotframework 上加载外部 URL