有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java阻止在selenium webdriver测试中加载外部内容

问题是:

是否可以告诉由selenium webdriver控制的浏览器不从外部源加载任何内容,或者不从给定的域列表加载资源

背景:

我有一个网页,我用selenium webdriver编写了一个基于java的测试脚本——我不能更改页面,我只需要编写测试。网站从另一个域加载的某些外部内容存在问题。外部的东西是一些javascript代码,实际上我的测试并不需要这些代码,但相关页面包含这些代码。现在问题来了。有时外部源的速度非常慢,导致webdriver无法在给定的页面加载超时(20秒)内加载页面。我的测试实际上运行得很好,因为页面实际上已经加载——所有的html都在那里,所有的内部脚本都已加载并且可以工作

关于这一点的随机想法:

有针对不同浏览器的扩展可以满足我的要求,但我需要用几种浏览器运行测试,即chrome、firefox和phantomjs。没有像phantomjs扩展这样的东西。如果可能的话,我需要一个完全基于webdriver技术的解决方案。不过,我愿意为每个浏览器编写一个单独的解决方案

我很感激任何关于如何解决这个问题的想法


共 (1) 个答案

  1. # 1 楼答案

    你可以将代理链接起来,但没有太多关于这样做的文档:

    http://www.nerdnuts.com/2014/10/browsermob-behind-a-corporate-proxy/

    我们可以使用以下代码在公司代理后面使用browsermob:

    // start the proxy
    server = new ProxyServer(9090);
    server.start();
    
    server.setCaptureContent(true);
    server.setCaptureHeaders(true);
    server.addHeader(“accept-encoding”, “”);//turn off gzip
    
    // Configure proxy server to use our network proxy
    server.setLocalHost(InetAddress.getByName(“127.0.0.1″));
    
    /**
     * THIS IS THE MAJICK!
     **/
    HashMap<String, String> options = new HashMap<String, String>();
    options.put(“httpProxy”, “172.20.4.115:8080″);
    server.setOptions(options);
    server.autoBasicAuthorization(“172.20.4.115″, “username”, “password”);
    
    // get the Selenium proxy object
    Proxy proxy = server.seleniumProxy();
    DesiredCapabilities capabilities = DesiredCapabilities.phantomjs();
    capabilities.setCapability(CapabilityType.PROXY, proxy);