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

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页面的截图的更多相关文章

  1. 章节十四、9-Actions类鼠标悬停、滚动条、拖拽页面上的元素

    一.鼠标悬停 1.在web网站中,有一些页面元素只需要我们将鼠标指针放在上面就会出现被隐藏的下拉框或者其它元素,在自动化的过程中我们使用Actions类对鼠标进行悬停操作. 2.案例演示 packag ...

  2. python学习笔记(十 四)、web.py

    使用web.py 通过python进行网页的编写,下面我们来简单了解一哈web.py 的使用 1 url处理 使用特定的url结构来解析我们发送的请求.如下面所示: urls = ( '/login' ...

  3. 章节十四、3-执行JavaScript命令

    一.网页页面都是由html+css和javaScript组成的,如果页面中没有javaScript的存在,就不会有操作动作的执行,例如页面上你点击的按钮或者链接都离不开javaScript.(这一节不 ...

  4. Spring Boot教程(二十四)Web应用的统一异常处理

    我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况.Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用来 ...

  5. 第十四章 web前端开发小白学爬虫

    老猿从事IT开发快三十年了,接触互联网也很久了,但自己没有做过web前端开发,只知道与前端开发相关的一些基本概念,如B/S架构.html标签.js脚本.css样式.xml解析.cookies.http ...

  6. 章节十四、7-如何切换到iFrame

    以下案例使用https://jqueryui.com/网站为例. 一.如何确定元素是否包含在iFarme中? 1.按F12打开发者选项,定位到指定的元素. 2.向上查找元素是否被包含在ifarme标签 ...

  7. 章节十四、8-javaScript弹框处理

    一.javaScript弹框没有id.也没有xpath,在F12开发者选项中无法直接通过鼠标去选择弹窗来确定元素在代码中的位置. 弹窗有两种,一种实只有"确定"按钮的alert类型 ...

  8. 章节十四、2-自动完成功能-Autocomplete

    一.什么是自动匹配功能? 很多网站都有自动匹配功能,列如你在使用天猫搜索商品时,输入“鞋”,输入框的下面会出现很多与“鞋”有关的选项. 二.以https://www.expedia.com/网站的城市 ...

  9. Selenium系列(十四) - Web UI 自动化基础实战(1)

    如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...

随机推荐

  1. Web服务器—Nginx

    Nginx常用命令: 启动nginx服务 [root@localhost ~]# service nginx start [root@localhost ~]# systemctl start ngi ...

  2. [日常] gocron源码阅读-使用go mod管理依赖源码启动gocron

    从 Go1.11 开始,golang 官方支持了新的依赖管理工具go modgo mod download: 下载依赖的 module 到本地 cachego mod edit: 编辑 go.modg ...

  3. yum / rpm 指令无反应

    当yum 或者 rpm 指令执行后没有任何反馈,可尝试执行以下指令: # rm -f /var/lib/rpm/__db.00* # 删除rpm数据文件 # rpm –rebuilddb # 重建rp ...

  4. Windows 10系统迁移

    快速复制硬盘可以调整目标盘分区大小(适用于不同容量的硬盘克隆) 调整完目标盘的系统分区大小后将恢复分区拖到系统分区后面对齐,恢复分区后面既可留出未分配容量用作Linux系统安装. 克隆完成后对uefi ...

  5. 线程休眠sleep

    一.sleep的作用 sleep() 定义在Thread.java中.sleep() 的作用是让当前线程休眠,即当前线程会从“运行状态”进入到“休眠(阻塞)状态”.sleep()会指定休眠时间,线程休 ...

  6. 【oracle】获取字符串长度

    lengthb(string)计算string所占的字节长度:返回字符串的长度,单位是字节 length(string)计算string所占的字符长度:返回字符串的长度,单位是字符

  7. C++ 基于rapidjson对json字符串的进行序列化与反序列化

    json字符串的解析以封装在我们开发过程中经常见到, 尤其在socket通信上面, 在一次项目中碰到json字符串的进行解析, 而公司有没有封装好的库, 于是就自己基于开源的库进行了一次封装, 接下是 ...

  8. Python入门基础学习记录(二)汇率案例学习记录

    一.汇总整理 1.操作 ①新建python文件 工程右键--new--python file 2.注意问题与知识点 >变量定义:直接写变量名即可,例如定义一个字符串并赋值123: rmb_str ...

  9. 代码问题【LDES//AAAI2019】

    paper:Li Y, Zhu J, Hoi S C H, et al. Robust Estimation of Similarity Transformation for Visual Objec ...

  10. 在Ubuntu18.04.2LTS上安装视频播放器smplayer/vlc

    在Ubuntu18.04.2LTS上安装视频播放器smplayer/vlc 一.前言 在Ubuntu上的视频播放器质量很差,没有解码器,非常的不方便,于是我们需要手动去安装适合我们的播放器,比如smp ...