用Selenium模拟间歇性网络故障

用Selenium模拟间歇性网络故障,selenium,selenium-webdriver,Selenium,Selenium Webdriver,运行具有长时间运行(非请求/响应操作)的测试以及轮询以检查状态。在投票过程中,我想让一些数据包消失。我一直看到这样的东西可能与WebDriver一起工作,但结果却很差。到底是完全在selenium内部执行此操作,还是必须使用完全外部代理 我的想法是像一个广告拦截器一样,我可以观察被请求的内容,拒绝某些连接,返回502之类的东西,或者什么也不返回。但是我希望它在测试的控制下,而不是外部设置。您可以使用代理来处理请求。阻止请求最简单。这可能是一种方法,具体取决于您的Web应用程序的执行方式。 查看B

运行具有长时间运行(非请求/响应操作)的测试以及轮询以检查状态。在投票过程中,我想让一些数据包消失。我一直看到这样的东西可能与WebDriver一起工作,但结果却很差。到底是完全在selenium内部执行此操作,还是必须使用完全外部代理


我的想法是像一个广告拦截器一样,我可以观察被请求的内容,拒绝某些连接,返回502之类的东西,或者什么也不返回。但是我希望它在测试的控制下,而不是外部设置。

您可以使用代理来处理请求。阻止请求最简单。这可能是一种方法,具体取决于您的Web应用程序的执行方式。 查看Browsermob代理使用情况:

请看这里开始:


但是,您应该能够动态地将代理配置为备用请求阻塞。

恐怕Selenium本身不支持此类选项。我将使用代理阻止或修改响应。可能会让您对相关体验有一些看法。因此,在selenium内部无法做到这一点,只能在外部实现。selenium是一个浏览器控制器。您可以动态设置一个代理来使用selenium驱动程序,如我的示例所示。
// Start the server and get the selenium proxy object
ProxyServer server = new ProxyServer(proxy_port);  // package net.lightbody.bmp.proxy

server.start();
server.setCaptureHeaders(true);
// Blacklist google analytics
server.blacklistRequests("https?://.*\\.google-analytics\\.com/.*", 410);
// Or whitelist what you need
server.whitelistRequests("https?://*.*.yoursite.com/.*. https://*.*.someOtherYourSite.*".split(","), 200);

Proxy proxy = server.seleniumProxy(); // Proxy is package org.openqa.selenium.Proxy

// configure it as a desired capability
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.PROXY, proxy);

// start the driver   ;
Webdriver driver = new FirefoxDriver(capabilities);

return driver;