当前位置: 首页 > 知识库问答 >
问题:

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

东门晨
2023-03-14

问题是:

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

背景:

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

关于这个的随机想法:

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

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

共有2个答案

鲁鹤轩
2023-03-14

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

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);
孟英叡
2023-03-14

解决方法是使用代理。WebDrier与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);

    return driver;
}

编辑:人们经常询问http状态码,您可以使用代理轻松检索它们。代码可以是这样的:

// create a new har with given label
public void setHar(String label) {
    server.newHar(label);
}

public void getHar() throws IOException {
    // FIXME : What should be done with the this data?
    Har har = server.getHar();
    if (har == null) return;
    File harFile = new File("C:\\localdev\\bla.har");
    har.writeTo(harFile);
    for (HarEntry entry : har.getLog().getEntries()) {
        // Check for any 4XX and 5XX HTTP status codes
        if ((String.valueOf(entry.getResponse().getStatus()).startsWith("4"))
                || (String.valueOf(entry.getResponse().getStatus()).startsWith("5"))) {
            log.warn(String.format("%s %d %s", entry.getRequest().getUrl(), entry.getResponse().getStatus(),
                    entry.getResponse().getStatusText()));
            //throw new UnsupportedOperationException("Not implemented");
        }
    }
}
 类似资料:
  • 问题内容: 问题: 是否可以告诉受selenium webdriver控制的浏览器不加载来自外部资源的任何内容,或者不加载来自给定域列表的资源? 背景: 我有一个网页,我可以使用Selenium Webdriver针对该网页编写基于Java的测试脚本- 我无法更改页面,我只需要编写测试即可。网站从其他域加载的某些外部内容存在问题。外部的东西是我的测试实际上不需要的一些javascript代码,但是

  • 问题内容: 我需要在我的站点中显示另一个外部站点的内容。通常标签可以做到这一点。但我的要求不是全部内容,而只是该网站的一部分。例如该网站的布局有3个部分,,,。我的意思是我只想显示一部分。我该怎么做? 我试过了,但是没有用。 问题答案: 这是由于ajax跨域安全性限制,一种技巧是从服务器设置代理脚本,该脚本从不同的站点(域)下载内容,并将该代理用作javascript中的参考。 示例:(proxy

  • 问题内容: 我想阻止从外部直接访问docker容器。我使用haproxy,并且只希望访问端口80、443。 我在iptables中添加了以下规则。但是我仍然可以通过不同的端口访问Docker容器。 这可能是由于DOCKER链 我需要创建什么规则来阻止直接访问? 问题答案: 您可以使用命令创建一个网络来连接应用程序和代理,而不必使用IP表来执行此操作。另外,请勿在任何端口上公开应用程序。您应该公开的

  • 本文向大家介绍在SAP UI5中加载外部库,包括了在SAP UI5中加载外部库的使用技巧和注意事项,需要的朋友参考一下 可以使用普通脚本标签中的文件插入外部库。SAP UI5还支持JQuery,因此可以通过扩展控制器的标题来完成。 您还可以使用以下命令添加任何外部文件- 您可以导航到以下路径以了解更多详细信息- https://blogs.sap.com/2016/04/22/include-ex

  • 在我的Espresso测试执行和AlertDialog会被提示并等待用户响应。Espresso测试只有在我按下“Accept”按钮但我想测试代替用户执行此事件时才会继续。 我注意到我的线程选项卡上有以下状态

  • 问题内容: 每个响应式网站开发教程都建议使用CSS属性来隐藏内容,以防止内容在移动浏览器中加载,从而使网站加载速度更快。是真的吗 难道不加载图像或它仍然加载在手机浏览器的内容?有什么方法可以防止在移动浏览器上加载不必要的内容? 问题答案: 浏览器变得越来越聪明。今天,如果浏览器(取决于版本)可以确定图像没有用,则可能会跳过图像加载。 该图像具有样式,但是脚本可以读取其大小。如果父级为隐藏状态,Ch