Selenium Webdriver:加载页面,没有任何资源

时间:2013-10-29 09:22:48

标签: java javascript selenium selenium-webdriver webdriver

我正在尝试阻止Javascript更改我正在使用Selenium测试的网站源代码。问题是,我不能简单地在Webdriver中关闭Javascript,因为我需要它来进行测试。这就是我正在为Firefox Webdriver做的事情:

        firefoxProfile.setPreference("permissions.default.image", 2);
        firefoxProfile.setPreference("permissions.default.script", 2);
        firefoxProfile.setPreference("permissions.default.stylesheet", 2);
        firefoxProfile.setPreference("permissions.default.subdocument", 2);

我不允许Firefox加载任何图像,脚本和样式表。 如何使用Internet Explorer Webdriver和Chrome Webdriver执行此操作?我没有找到任何类似的偏好。或者甚至有更优雅的方法来阻止webdrivers加载网站的JS文件? 谢谢!

2 个答案:

答案 0 :(得分:5)

解决方案是使用代理。 Webdriver与browsermob代理集成得非常好:http://bmp.lightbody.net/

private WebDriver initializeDriver() throws Exception {
    // 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);
    //WebDriver driver = new InternetExplorerDriver();

    return driver;
}

答案 1 :(得分:1)

以跨浏览器方式完成所需内容的最简单方法可能是使用代理。这将允许您拦截对资源的请求,并阻止它们。这也有利于为所有浏览器使用相同的代码,而不是必须使用该浏览器独有的设置来特殊设置每个浏览器。