selenium+java+test4j综合应用自动登录,包括截屏和截取图片操作

selenium+java+test4j综合应用自动登录,包括截屏和截取图片操作

环境要求

eclipse+Junit+Firefox+selenium+test4j
selenium直接在Firefox中搜索IDE添加插件,还需要几个jar包
test4j直接下载文件解压使用

通过IDE制作javaJunit

在这里插入图片描述
IDE添加后,在Firefox的右上角那个se小图标,在在Firefox中安装IDE插件后,打开IDE插件,可以制作java测试类,全程IDE录屏,可以检测输入,鼠标点击,做好后直接导出即可
在这里插入图片描述
录制完成后直接export为javaJunit即可,打开导出的文件即可编写,测试前编写准备代码,启动Firefox, geckodriver.exe是浏览驱动,可以在GitHub搜索下载,后面的文件路径为本机电脑文件位置

public void setUp() {

		System.setProperty("webdriver.firefox.bin", "F:\\软件安装\\Firefox\\firefox.exe");// 浏览器路径

		System.setProperty("webdriver.gecko.driver",
				"D:\\软件测试\\selenium tools\\latest release tools\\geckodriver-v0_64位\\geckodriver.exe");// 浏览器驱动路径

		driver = new FirefoxDriver();
		js = (JavascriptExecutor) driver;
		vars = new HashMap<String, Object>();
	}

截屏

接下来写的是截屏代码,添加在输入密码后,最好设置一个缓冲时间,防止没有加载出来,因为后面的test4j需要识别的是JPEG类型的图片,所以这里的截屏保存为JPEG类型

		//设置一个缓冲时间,加载完成后再截屏
		try {
			Thread.sleep(2000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
		//截屏
		try {
			WebDriver augmentedDriver = new Augmenter().augment(driver);
			File screenshot = ((TakesScreenshot) augmentedDriver).getScreenshotAs(OutputType.FILE);
			File file = new File("D:\\temp.jpeg");	//这里的位置是截屏的位置
			FileUtils.copyFile(screenshot, file);
		} catch (IOException e) { // TODO Auto-generated catch block
			System.out.println("Can't save screenshot");
			e.printStackTrace();
		}

截取图片

前面的截屏是截取的全屏,识别验证码是需要截取验证码部分,

//保存截屏
	public static void yanzhenma() {
		File scrFile = new File("D:\\temp.jpeg");		//这里是前面截屏的位置
		File scrFile1 = new File("D:\\temp1.jpeg");		//这是要截取验证码部分的位置
		try {
			BufferedImage img = ImageIO.read(scrFile);
			BufferedImage dest = img.getSubimage(750, 467, 63, 26);	//四个参数是验证码所在的位置,(x,y,width,height)

			ImageIO.write(dest, "jpeg", scrFile1);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

识别验证码

前面验证码的截屏文件为temp1.jpeg,此时只需要使用这个文件进行识别即可,这里需要用的就是test4j,我写的是一个方法,方法参数就是截屏的位置,即我前面用的"D:\temp1.jpeg"

// 通过照片识别验证码
	public static String executeTess4J(String imgUrl) {
		String ocrResult = "";
		try {
			ITesseract instance = new Tesseract();
			File imgDir = new File(imgUrl);
			long startTime = System.currentTimeMillis();
			ocrResult = instance.doOCR(imgDir);
		} catch (TesseractException e) {
			e.printStackTrace();
		}
		return ocrResult;
	}

用了几次,识别的通过率不是很高,但是还可以,有的验证码太小了识别成功率较低

注意

之前测试登录,点击登录后进入另外一个页面,因为切换了frame,导致截屏不是自己想要的位置截取的是切换frame后的页面同样大小的左上角


		driver.switchTo().frame("alertlogin"); // 切换到登录frame

这里在截屏之前需要需要切换到主页面,然后截屏后再切换到当前frame

// 返回到主界面,截屏后返回到当前frame
		driver.switchTo().parentFrame();

返回后截屏,截屏后,再返回到当前frame


		driver.switchTo().frame("alertlogin");//我的frame是alertlogin

关于test4j和selenium安装,我之前搜索中都看到过,可以去找一下,后期我找到了再发出来

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值