1

我试图阻止 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 文件?谢谢!

4

2 回答 2

6

解决方案是使用代理。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;
}
于 2013-10-29T09:57:30.603 回答
1

以跨浏览器的方式完成您想要的最简单的方法可能是使用代理。这将允许您拦截对资源的请求并阻止它们。这也将具有对所有浏览器使用相同代码的优势,而不是必须使用该浏览器独有的设置对每个浏览器进行特殊处理。

于 2013-10-29T09:51:04.777 回答