章节十四、5- web页面的截图
一、以雅虎网站为例,当我们在登录时,输入错误的用户名然后点击“下一步”,用户名输入框会提示红色字体,这个时候我们就将页面进行截图。

http://commons.apache.org/proper/commons-io/download_io.cgi
package basicweb; import java.io.File;
import java.util.concurrent.TimeUnit; import org.apache.commons.io.FileUtils;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver; class Screenshots { WebDriver driver;
String url;
@BeforeEach
void setUp() throws Exception {
driver = new ChromeDriver();
url = "https://login.yahoo.com/config/login?.src=fpctx&.intl=us&.lang=en-US&.done=https%3A%2F%2Fwww.yahoo.com";
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(2000,TimeUnit.SECONDS);
} @Test
void test() throws InterruptedException {
driver.get(url);
// 查找到登录文本框,输入test
driver.findElement(By.xpath("//input[@name='username']")).sendKeys("test");
// 点击登录按钮
driver.findElement(By.xpath("//input[@id='login-signin']")).sendKeys(Keys.ENTER);
} // 创建一个获取随机字符串的方法用来给截图的内容图片赋值
// 在调用该方法时,列如length赋值是5,那么文件名的长度就为5,由5个字符组成
public static String getRandomString(int length) {
// StringBuilder 是一个可变的字符序列
StringBuilder sb = new StringBuilder();
String characters = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPAZSXDCFVGBHNJMKL1234567890";
// for循环从定义的characters字符串中随机取出指定length长度的字符串
for(int i = 0; i<length;i++) {
// Math.random()取0到1之间的一个随机数然后乘以characters字符串的长度,得到一个double类型的数据,因此要强制转换成int类型得到一个整数,成为characters字符串的索引
int index = (int)(Math.random() * characters.length());
// 通过charAt获得字符串上索引的值,来作为append方法的参数
// append方法是为了把获取到的字符全部连接到一起,先取一个字符放到bulider缓存区中,然后再循环追加取剩下的值,直到满足length长度
sb.append(characters.charAt(index));
}
// 然后将取到的字符串值返回
return sb.toString();
} @AfterEach
void tearDown() throws Exception {
Thread.sleep(2000);
// 截图首先需要一个文件名,调用上面定义的随机生成文件名的方法,.png表示文件的扩展名
String fileName = getRandomString(10)+".png";
// 存放图片的路径
String directory = "C:\\Users\\acer\\Desktop\\";
// 以文件的形式输出
// 把driver转换为TakesScreenshot类型
File sourceFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
// 复制文件
FileUtils.copyFile(sourceFile,new File(directory+fileName));
driver.quit();
}
}
运行结果:成功截图且截图结果与预期结果一致

注意:(在实现截图功能的过程中遇到一个问题浪费了我一下午的时间)
雅虎用户名输入框在输入错误的用户名或者为空的情况下点击登录按钮,用户名输入框会出现红色的提示性文字。
一开始我使用的是click来进行点击,但始终未成功,
driver.findElement(By.xpath("//input[@id='login-signin']")).click();
然后我就想是不是定位有问题、farme标签等等情况导致我定位不成功,在查询资料时发现因为各个网站功能实现方式有差异,所以导致click对有些input标签不生效,而登录按钮正是input标签,于是我改用sendkeys发生Enter按键操作来实现,成功,nice。(需要导包keys包)
driver.findElement(By.xpath("//input[@id='login-signin']")).sendKeys(Keys.ENTER);
如果有不明白的小伙伴可以加群“555191854”问我,群里都是软件行业的小伙伴相互一起学习。
章节十四、5- web页面的截图的更多相关文章
- 章节十四、9-Actions类鼠标悬停、滚动条、拖拽页面上的元素
一.鼠标悬停 1.在web网站中,有一些页面元素只需要我们将鼠标指针放在上面就会出现被隐藏的下拉框或者其它元素,在自动化的过程中我们使用Actions类对鼠标进行悬停操作. 2.案例演示 packag ...
- python学习笔记(十 四)、web.py
使用web.py 通过python进行网页的编写,下面我们来简单了解一哈web.py 的使用 1 url处理 使用特定的url结构来解析我们发送的请求.如下面所示: urls = ( '/login' ...
- 章节十四、3-执行JavaScript命令
一.网页页面都是由html+css和javaScript组成的,如果页面中没有javaScript的存在,就不会有操作动作的执行,例如页面上你点击的按钮或者链接都离不开javaScript.(这一节不 ...
- Spring Boot教程(二十四)Web应用的统一异常处理
我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况.Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用来 ...
- 第十四章 web前端开发小白学爬虫
老猿从事IT开发快三十年了,接触互联网也很久了,但自己没有做过web前端开发,只知道与前端开发相关的一些基本概念,如B/S架构.html标签.js脚本.css样式.xml解析.cookies.http ...
- 章节十四、7-如何切换到iFrame
以下案例使用https://jqueryui.com/网站为例. 一.如何确定元素是否包含在iFarme中? 1.按F12打开发者选项,定位到指定的元素. 2.向上查找元素是否被包含在ifarme标签 ...
- 章节十四、8-javaScript弹框处理
一.javaScript弹框没有id.也没有xpath,在F12开发者选项中无法直接通过鼠标去选择弹窗来确定元素在代码中的位置. 弹窗有两种,一种实只有"确定"按钮的alert类型 ...
- 章节十四、2-自动完成功能-Autocomplete
一.什么是自动匹配功能? 很多网站都有自动匹配功能,列如你在使用天猫搜索商品时,输入“鞋”,输入框的下面会出现很多与“鞋”有关的选项. 二.以https://www.expedia.com/网站的城市 ...
- Selenium系列(十四) - Web UI 自动化基础实战(1)
如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...
随机推荐
- [b0037] python 归纳 (二二)_多进程数据共享和同步_管道Pipe
# -*- coding: utf-8 -*- """ 多进程数据共享 管道Pipe 逻辑: 2个进程,各自发送数据到管道,对方从管道中取到数据 总结: 1.只适合两个进 ...
- linux查询及添加用户
1.查询用户. 存储帐号的文件:/etc/passwd 存储密码的文件:/etc/shadow Cat /etc/passwd Cat /etc/shadow 2.添加用户 输入命令: usera ...
- C语言中变量和函数的作用域和链接属性
C语言中变量和函数的作用域和链接属性 作用域 代码块作用域: 代码块指的是使用"{}"包围起来的部分. 在代码块中定义的变量,代码块之外是不能访问的. 代码块嵌套之后的变量作用域, ...
- eclipse C++ 配置自动提示
转:http://www.cnblogs.com/myitm/archive/2010/12/17/1909194.html 定位到:Windows→Preferences→Java→Editor→C ...
- vue中的router和route有什么区别?
我只知道前者一般用在跳转路由的时候,push一个url, 而后者则用来存储路由跳转过程中存储的各种数据. 话不多说,这篇博客讲的比较详细,可以参考一下. vue2.0中的$router 和 $rout ...
- 剑指Offer-3.从尾到头打印链表(C++/Java)
题目: 输入一个链表,按链表从尾到头的顺序返回一个ArrayList. 分析: 很简单的一道题,其实也就是从尾到头打印链表,题目要求返回ArrayList,其实也就是一个数组. 可以将链表中的元素全部 ...
- 【2019.8.12 慈溪模拟赛 T2】汪哥图(wang)(前缀和)
森林 考虑到题目中给出条件两点间至多只有一条路径. 就可以发现,这是一个森林. 而森林有一个很有用的性质. 考虑对于一棵树,点数-边数=\(1\). 因此对于一个森林,点数-边数=连通块个数. 所以, ...
- Note | Ubuntu
目录 0. 教程 1. 安装 2. 系统 0. 教程 <Linux就该这么学>:https://www.cnblogs.com/RyanXing/p/9462850.html 1. 安装 ...
- Unity开发实战探讨-资源的加载释放最佳策略
注:本文中用到的大部分术语和函数都是Unity中比较基本的概念,所以本文只是直接引用,不再详细解释各种概念的具体内容,若要深入了解,请查阅相关资料. Unity的资源陷阱 游戏资源的加载和释放导致的内 ...
- mysql count的理解
mysql count的理解 1 select count(tel) as telcount from info;如果tel列有null 将不会被统计进去 2 count(*) 这样写性能更好 3 M ...