环境:
- Selenium 2.39独立服务器
- PHP 5.4.11
- PHPUnit 3.7.28
- Chrome V31& ChromeDriver v2.7
我正在测试一个网站,该网站会调用很多广告系统,例如Google AD 浏览器需要花费大量时间连接到外部AD链接,甚至已经加载了页面的所有元素。
如果我在网页上运行测试时网络速度不快,
由于AD链路响应缓慢,Selenium会等待很长时间。
在这种情况下,Selenium通常等待超过60秒,并抛出超时异常。
我不确定Senelium是如何工作的,但似乎Selenium必须等待网页完全加载的标志,然后拉出DOM来查找元素。
我想让selenium操作元素而不必等待连接到外部AD链接 有没有办法做到这一点 ?非常感谢你。
答案 0 :(得分:2)
我建议您可以使用代理。 Browsermob与硒很好地结合,非常容易使用它:
// start the proxy
ProxyServer server = new ProxyServer(4444);
server.start();
// get the Selenium proxy object
Proxy proxy = server.seleniumProxy();
// This line will automatically return http.200 for any request going to google analytics
server.blacklistRequests("https?://.*\\.google-analytics\\.com/.*", 200);
// configure it as a desired capability
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.PROXY, proxy);
// start the browser up
WebDriver driver = new FirefoxDriver(capabilities);
我不确定Senelium是如何工作的,但似乎Selenium必须这样做 等待网页完全加载的迹象,然后拉出DOM找到 元件。
非常像这样。默认loading strategy为“NORMAL”,表示:
DOMString类型的NORMAL 远程端必须等到当前处理命令的帧的“document.readyState”等于“完成”,否则没有 除XMLHttpRequests之外的更优秀的网络请求。
答案 1 :(得分:0)
我终于为我的病情找到了一个简单的解决方案。
我决定阻止这些广告请求,并尝试了一些防火墙和代理软件,例如,
comodo,privatefirewall等
comodo太沉重和复杂,privatefirewall不支持通配符,防火墙会中断测试。
最后我选择了代理软件CCproxy。试用版就足够了。
我为localhost创建了一个规则,使它只能请求我的测试网站域,并拒绝所有其他请求。
运行测试的成本大约需要1-2分钟,现在只需30秒,如果没有连接到无用的广告链接,它显然会更加稳定和快速。
以下是配置步骤:
1.使用Administor权限启动CCproxy(您应该在文件属性中使用Adminisrator进行设置)
2.单击选项,选择AutoStartup,选择AutoDetected for Local IP Address。单击“确定”
3.创建一个txt文件,输入您的域名,例如“* .rong360.com *; * .rong360。*;”
4.点击帐户,选择PermitOnly for Permit Category;
单击“新建”,输入127.0.0.1作为IP地址/范围;
选择WebFilter,单击右侧的E按钮创建过滤器;
单击...按钮,选择您在步骤3中创建的文本文件,
选择PermittedSites。单击确定
单击“确定”
5.单击确定返回CCproxy的主UI
6.启动IE并使用127.0.0.1:808配置本地代理
其他浏览器也会自动使用此配置。
现在你可以再次运行测试,如果条件相同你会感觉更好:)