Java+Selenium框架:实现web自动化页面截屏

需求:先假设UI自动化执行case异常或是错误,需要web页面截图,留下证据提交bug;代码如何实现?

1、场景:先不管case执行结果如何,反正就是执行完截屏就OK了。先给截图名称写一个随机文件名方法:

public static String getRandomString(int length) {

		StringBuilder sb = new StringBuilder();
		String characters = "1234567890qwertyuioplkjhgfdsazxcvbnmPOIUYTREWQASDFGHJKLMNBVCXZ";

		for (int i = 0; i < length; i++) {
			int index = (int) (Math.random() * characters.length());
			sb.append(index);
		}

		return sb.toString();

	}

2、以登录百度网站为例,点击登录,弹窗,点击用户名登录,输出用户名,点击登录按钮;

	public void test() {
		js.executeScript("window.location='https://www.baidu.com';");

		List els = (List) js
				.executeScript("return document.getElementsByName('tj_login');");

		js.executeScript("arguments[0].click();", els.get(0));

		js.executeScript("arguments[0].click();", driver.findElement(By
				.cssSelector("p.tang-pass-footerBarULogin.pass-link")));
		System.out.println("点击用户名登录");

		js.executeScript("arguments[0].value='test_login';", driver
				.findElement(By.cssSelector("input#TANGRAM__PSP_10__userName")));
		System.out.println("输入用户名");
		js.executeScript("arguments[0].click();", driver.findElement(By
				.cssSelector("input#TANGRAM__PSP_10__submit")));
		System.out.println("点击登录");
	}

tips: selenium框架处理弹窗有几种方法,自封装的切换iframe窗体、js处理,及弹窗的不同方式:alert、confirm等,这里对于登录百度的弹窗,id定位不上,最终使用cssSelector定位成功,用户名输入框及按钮也是采用cssSelector定位方法(id定位需要设置等待几秒或无法确认id);

3、所以不管上面的case是否成功,都要截图,在@After属性的方法里写,或者这把截图方法给封装起来调用亦可:

		String fileName = getRandomString(10) + ".png";
		String directory = "D:\\";
		File sourcefile = ((TakesScreenshot) driver)
				.getScreenshotAs(OutputType.FILE);
		FileUtils.copyFile(sourcefile, new File(directory + fileName));

4、执行case截图为:后续扩展在TestNG框架生成报告,把截图给放在report里。Java+Selenium框架:实现web自动化页面截屏_第1张图片

你可能感兴趣的:(Java+Selenium框架:实现web自动化页面截屏)