微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java-使用Selenium在Chrome浏览器中保存文档

我有一个Selenium(Java)测试应用程序,该应用程序在浏览器中打开pdf文档,并将其保存到硬盘驱动器中,以供稍后在测试中使用.由于将要在多台计算机上使用该测试,因此无法手动设置配置文件.它必须以编程方式完成.

在Firefox中,我设置了配置文件首选项:

    FirefoxProfile profile = new FirefoxProfile();
    profile.setPreference("browser.download.manager.showWhenStarting", false);
    profile.setPreference("browser.download.dir", appSet.getDocumentSavePath());
    profile.setPreference("browser.download.folderList", 2);
    profile.setPreference("plugin.disable_full_page_plugin_for_types", "application/pdf");
    profile.setPreference("pref.downloads.disable_button.edit_actions", true);
    profile.setPreference("browser.helperApps.neverAsk.savetodisk", "application/pdf");
    profile.setPreference("pdfjs.disabled", true);

Chrome是否有等效功能

我知道Chrome中有一些功能可以设置开关,但是我看不到有什么功能可以帮助我.

DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability("chrome.binary", appSet.getChromeBinaryLocation());
capabilities.setCapability("chrome.switches", Arrays.asList("--allow-running-insecure-   content=true"));

解决方法:

我希望这对某人有用.该解决方案适用于跨浏览器,并且在启动时不依赖于在浏览器中设置配置文件或首选项.

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Set;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.CookieStore;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.params.ClientPNames;
import org.apache.http.client.params.CookiePolicy;
import org.apache.http.client.protocol.ClientContext;
import org.apache.http.cookie.ClientCookie;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.cookie.BasicclientCookie2;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.openqa.selenium.WebDriver;

public void downloadDocument(String documentName) {
    HttpClient httpClient = new DefaultHttpClient();
    httpClient.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.BEST_MATCH);

    CookieStore cookieStore = new BasicCookieStore();
    Set<org.openqa.selenium.Cookie> cookies = driver.manage().getCookies();

    for (org.openqa.selenium.Cookie cookie: cookies) {
        BasicclientCookie2 cookie2 = new BasicclientCookie2(cookie.getName(), cookie.getValue());
        cookie2.setAttribute(ClientCookie.VERSION_ATTR, "1");
        cookie2.setAttribute(ClientCookie.DOMAIN_ATTR, cookie.getDomain());
        cookie2.setDomain(cookie.getDomain());
        cookie2.setPath(cookie.getPath());
        cookie2.setExpiryDate(cookie.getExpiry());
        cookieStore.addCookie(cookie2);
    }

    HttpContext httpContext = new BasicHttpContext();
    httpContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);

    try {
        HttpResponse httpResponse = httpClient.execute(new HttpGet(driver.getcurrenturl()), httpContext);
        InputStream inputStream = httpResponse.getEntity().getContent();

        FileOutputStream fos = new FileOutputStream (getDocumentSavePath() + documentName.replaceAll("\\s+", "") + ".pdf");

        byte[] buffer = new byte[2048];
        int bytesRead = 0;
        while ((bytesRead = inputStream.read(buffer)) != -1) {
            fos.write(buffer, 0, bytesRead);
        }

        fos.close();
    } catch (ClientProtocolException e) { logger.error("message and trace")
    } catch (IOException e) { logger.error("message and trace")
    }

    httpClient.getConnectionManager().shutdown();

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐