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

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. [b0040] python 归纳 (二五)_多进程数据共享和同步_信号量Semaphore

    # -*- coding: utf-8 -*- """ 多进程同步 使用信号量 multiprocessing.Semaphore 逻辑: 启动5个进程,打印,每个各自睡 ...

  2. [b0002] Hadoop HDFS cmd常用命令练手

    目的: 学会HDFS CLI 常用操作 环境: Hadoop 2.6.4 伪分布式版 环境搭建参考本博客前篇文章: 伪分布式 hadoop 2.6.4 帮助: hadoop@ssmaster:~$ h ...

  3. oracle SSL 配置

    可以参考metalink号:762286.1 End To End Examples of using SSL With Oracle's JDBC THIN Driver   ======   大致 ...

  4. 扎西平措 201571030332 《面向对象程序设计 (JAVA)》第二周 学习总结

    面向对象程序设计 (JAVA)>第二周 学习总结 项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>https://www.cnblogs.com/nwnu-daizh/ 这 ...

  5. jQuery中的筛选(六)

    1. eq(index|-index) 获取当前链式操作中第N个jQuery对象,返回jQuery对象,当参数大于等于0时为正向选取,比如0代表第一个,1代表第二个.当参数为负数时为反向选取,比如-1 ...

  6. ShuffleNet:

    ShuffleNet算法详解 论文:ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices ...

  7. 冒泡排序法(C语言)

    冒泡排序(Bubble Sort)一种计算机科学领域的较简单的排序算法.它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小.首字母从从Z到A)错误就把他们交换过来.走访元素的工 ...

  8. DRF--介绍和安装

    前后端不分离 在前后端不分离的应用模式中,前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,也就是后端需要控制前端的展示,前端与后端的耦合度很高.这种应用模式比较适合纯网页应用,但是当后端对接 ...

  9. 【2019.8.14 慈溪模拟赛 T2】黑心老板(gamble)(2-SAT)

    \(2-SAT\) 考虑每个点只能选择\(R\)或\(B\),可以看作选\(0\)或\(1\). 然后对于给出的关系式,若其中一个位置满足关系式,另两个位置就必须不满足关系式,这样就可以对于每个关系式 ...

  10. Note | Python

    目录 PyCharm+远程服务器 预备工作 Pycharm配置 list方法 os imageio Python Image Libarary (PIL) random time PyCharm+远程 ...