废话不多说上代码:(我是用的chrome举得例子哈)

第一步,需要chromedriver.exe 目的和调起chrome 浏览器打开连接,chromedriver.exe的版本与你的chrome版本一致才行,放一张版本对照图

下载chromedriver连接http://chromedriver.storage.googleapis.com/index.html

第二步:上代码

package src;
import java.io.File;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date; import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.Platform;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait; public class WebDriverUtil implements Runnable {
public final String ROOT_PATH = System.getProperty("user.dir"); // 获取工作目录路径
public static final SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSS");
public WebDriver driver = null; // 打开URL连接
public void open() {
// System.setProperty("webdriver.chrome.driver",this.ROOT_PATH+"/dirver/chromedriver.exe");//指定驱动路径
// 选择执行对象,版本信息,以及系统类型
DesiredCapabilities ffDesiredcap= new DesiredCapabilities("chrome", "75.0.3770.142", Platform.WINDOWS);
try{
this.driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"),ffDesiredcap);
this.driver.get(path);
this.driver.manage().window().maximize();
} catch (Exception e) {
System.out.println(Thread.currentThread().getId()+" 错误 !!!");
e.printStackTrace();
}
} /**
* 截取屏幕
* @param fileName
*/
public void captureScreenshot() {
String dirName = "e:/test";
if (!(new File(dirName).isDirectory())) {
new File(dirName).mkdir();
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
     
String date = sdf.format(new Date());
TakesScreenshot tsDriver = (TakesScreenshot) this.driver;
File saveImage = new File(dirName + File.separator + date + "_" + fileName==null?"":fileName + ".png");
tsDriver.getScreenshotAs(OutputType.FILE).renameTo(saveImage);
}
}

首先上面这个代码是一个单独的类

想使用多线程并发打开连接,就得在多线程,每个线程内去进行以下操作

WebDriverUtil webDriverUtil = new WebDriverUtil();
webDriverUtil.open("file:///E:\\css3_button33\\index.html");
webDriverUtil.captureScreenshot("as"); 注意:必须在多线程每个线程内去实例化调用

还没完,解释一下:

http://localhost:4444/wd/hub 是固定的url,服务端url,
ffDesiredcap 是执行浏览器对象
 RemoteWebDriver(new URL("http://localhost:4444/wd/hub"),ffDesiredcap)

需要服务端去监听4444 端口,执行selenium-server-standalone-3.9.1.jar程序

链接:https://pan.baidu.com/s/1j7sKkm2FlNumYVjWSBtbCw   去下载 selenium-server-standalone-3.9.1.jar

提取码:q8oi

下载下来 执行, selenium-server-standalone-3.9.1.jar 当前所在的目录下执行这个jar 命令下面执行

java -Dwebdriver.chrome.driver="E:\test\chromedriver.exe" -jar selenium-server-standalone-3.9.1.jar
执行完了之后,为了检测是否监听了4444端口后可以成功调用chrome浏览器,打开链接 http://localhost:4444/wd/hub/static/resource/hub.html

点击ok,会打开chrome浏览器一个窗口,恭喜你成功了

java+selenium-3.9.1多线程 打开连接截取屏幕截图的更多相关文章

  1. java+selenium打开浏览器实现后台静默运行

    简介:java selenium搭建无界面浏览器 PhantomJS是一个基于Webkit的"无界面"(headless)浏览器,它会把网站加载到内存并执行页面上的JavaScri ...

  2. 第九节:详细讲解Java中的泛型,多线程,网络编程

    前言 大家好,给大家带来详细讲解Java中的泛型,多线程,网络编程的概述,希望你们喜欢 泛型 泛型格式:ArrayList list= new ArrayList(); ArrayList list= ...

  3. 《手把手教你》系列技巧篇(二十三)-java+ selenium自动化测试-webdriver处理浏览器多窗口切换下卷(详细教程)

    1.简介 上一篇讲解和分享了如何获取浏览器窗口的句柄,那么今天这一篇就是讲解获取后我们要做什么,就是利用获取的句柄进行浏览器窗口的切换来分别定位不同页面中的元素进行操作. 2.为什么要切换窗口? Se ...

  4. 《手把手教你》系列技巧篇(四十四)-java+ selenium自动化测试-处理https 安全问题或者非信任站点-下篇(详解教程)

    1.简介   这一篇宏哥主要介绍webdriver在IE.Chrome和Firefox三个浏览器上处理不信任证书的情况,我们知道,有些网站打开是弹窗,SSL证书不可信任,但是你可以点击高级选项,继续打 ...

  5. 《手把手教你》系列基础篇(八十六)-java+ selenium自动化测试-框架设计基础-Log4j实现日志输出(详解教程)

    1.简介 自动化测试中如何输出日志文件.任何软件,都会涉及到日志输出.所以,在测试人员报bug,特别是崩溃的bug,一般都要提供软件产品的日志文件.开发通过看日志文件,知道这个崩溃产生的原因,至少知道 ...

  6. javax.transaction.xa.XAException: java.sql.SQLException: 无法创建 XA 控制连接。(SQL 2000,SQL2005,SQL2008)

    javax.transaction.xa.XAException: java.sql.SQLException:无法创建 XA 控制连接.错误: 未能找到存储过程'master..xp_sqljdbc ...

  7. Mybatis 打开连接池和关闭连接池性能对比

    1  创建数据库表 -- phpMyAdmin SQL Dump -- version 4.2.11 -- http://www.phpmyadmin.net -- -- Host: localhos ...

  8. Electorn(桌面应用)自动化测试之Java+selenium实战例子

    基于electorn的桌面应用,网上相关资料较少.所有记录一下.使用java+selenium+testng对该类型应用的自动化测试方法. 代码样例 package com.contract.web. ...

  9. 【java+selenium】网易云音乐刷累计听歌数

    背景应该是在去年的时候,刷知乎看到一个问题,大概是说怎么刷网易云音乐个人累计听歌数,然后有一个高赞回答,贴了一段js代码,直接在浏览器console执行就可以了.当时试了下,直接一下子刷了有好几万.悲 ...

随机推荐

  1. Mina实现Socket通信完整过程

    目录 服务端 客户端 通信 自定义工厂编解码 解码器 编码器 总结 # 加入战队 微信公众号 title: Mina服务端客户端通信 date: 2018-09-30 09:00:30 tags: - ...

  2. 纯数据结构Java实现(5/11)(Set&Map)

    纯数据结构Java实现(5/11)(Set&Map) Set 和 Map 都是抽象或者高级数据结构,至于底层是采用树还是散列则根据需要而定. 可以细想一下 TreeMap/HashMap, T ...

  3. 服务器小白的我,是如何将 node+mongodb 项目部署在服务器上并进行性能优化的

    前言 本文讲解的是:做为前端开发人员,对服务器的了解还是小白的我,是如何一步步将 node+mongodb 项目部署在阿里云 centos 7.3 的服务器上,并进行性能优化,达到页面 1 秒内看到 ...

  4. JavaScrip数据类型

    数据类型: 基础数据类型: Number String Boolean Undefined Null 引用数据类型: Object Symbol

  5. linux安装man中文手册并保留英文man手册

    大家都知道学习linux系统,查找man手册帮助是非常重要的,然而默认linux的man手册是英文文档,快速阅读英文man固然重要,不过配置好中文man也可以让自己更快速地学习!当然英文学习大家还是不 ...

  6. xgboost保险赔偿预测

    XGBoost解决xgboost保险赔偿预测 import xgboost as xgb import pandas as pd import numpy as np import pickle im ...

  7. Python之变量的创建过程

    Python之变量的创建过程 一.变量创建过程 首先,当我们定义了一个变量name = 'Kwan'的时候,在内存中其实是做了这样一件事: 程序开辟了一块内存空间,将'Kwan'存储进去,再让变量名n ...

  8. C#开发学习人工智能的第一步

    前言 作为一个软件开发者,我们除了要学会复制,黏贴,还要学会调用API和优秀的开源类库. 也许,有人说C#做不了人工智能,如果你相信了,那只能说明你的思想还是狭隘的. 做不了人工智能的不是C#这种语言 ...

  9. 【故障公告】阿里云 RDS 数据库服务器 CPU 100% 造成全站故障

    非常非常抱歉,今晚 19:34 ~ 21:16 园子所使用的阿里云 RDS 数据库服务器突然出现 CPU 100% 问题,造成全站无法正常访问,由此您带来了很大的麻烦,请您谅解. 故障经过是这样的.1 ...

  10. CF #535 (Div. 3) E2 Array and Segments (Hard version) 利用线段树进行区间转移

    传送门 题意:    有m个区间,n个a[ i ] , 选择若干个区间,使得整个数组中的最大值和最小值的差值最小.n<=1e5,m<=300; 思路: 可以知道每个i,如果一个区间包含这个 ...