自动化测试selenium篇(三)
1. 键盘事件
1.1 键盘按键用法
要使用键盘按键,必须引入keys 包: from selenium.webdriver.common.keys import Keys 通过send_keys()调用按键:
send_keys(Keys.TAB) # TAB
send_keys(Keys.ENTER) # 回车
send_keys(Keys.SPACE) #空格键
send_keys(Keys.ESCAPE) #回退键(Esc)
1、回车
// 回车
webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.ENTER);
private static void Test14() throws InterruptedException {
// 创建一个浏览器驱动
WebDriver webDriver = new ChromeDriver();
// 打开百度首页
webDriver.get("https://www.baidu.com/");
// 输入“蛋糕”
webDriver.findElement(By.cssSelector("#kw")).sendKeys("沈梦瑶");
sleep(3000);
// 回车
webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.ENTER);
sleep(3000);
// 校验
List<WebElement> webElements = webDriver.findElements(By.xpath("//font[text()=\"沈梦瑶\"]"));
sleep(3000);
int flag = 0;
// 找到搜索结果,如果有蛋糕这个关键词对应的元素,测试通过
// 否则测试不通过
for(int i = 0; i < webElements.size(); i++) {
if(webElements.get(i).getText().equals("蛋糕")) {
flag = 1;
break;
}
}
if(flag == 1) {
System.out.println("测试通过");
} else {
System.out.println("测试不通过");
}
}
1.2 键盘组合键用法
send_keys(Keys.CONTROL,'a') #全选(Ctrl+A)
send_keys(Keys.CONTROL,'c') #复制(Ctrl+C)
send_keys(Keys.CONTROL,'x') #剪贴(Ctrl+X)
send_keys(Keys.CONTROL,'v') #粘贴(Ctrl+V)
代码如下:
private static void Test15() throws InterruptedException {
// 创建一个浏览器驱动
WebDriver webDriver = new ChromeDriver();
// 打开百度首页
webDriver.get("https://www.baidu.com");
// 输入“蛋糕”
webDriver.findElement(By.cssSelector("#kw")).sendKeys("沈梦瑶");
sleep(3000);
// Ctrol + A
webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "A");
sleep(4000);
// Ctrol + X
webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "X");
sleep(4000);
// Ctrol + V
webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "V");
sleep(4000);
// 点击百度一下按钮
webDriver.findElement(By.cssSelector("#su")).click();
// 校验
String no_expected_url = "https://www.baidu.com/";
String cur_url = webDriver.getCurrentUrl();
if(cur_url.equals(no_expected_url)) {
System.out.println("测试不通过");
} else {
System.out.println("测试通过");
}
}
2. 鼠标事件
ActionChains(driver) 生成用户的行为。所有的行动都存储在actionchains 对象。通过perform()存储的行为。
move_to_element(element) 移动鼠标到一个元素中,menu 上面已经定义了他所指向的哪一个元素
perform() 执行所有存储的行为
ActionChains 类
context_click() 右击
double_click() 双击
drag_and_drop() 拖动
move_to_element() 移动
2.1 右键鼠标
代码如下:
private static void Test16() throws InterruptedException {
// 创建一个驱动
WebDriver webDriver = new ChromeDriver();
// 打开百度首页
webDriver.get("https://www.baidu.com/");
// 输入“企业微信”
webDriver.findElement(By.cssSelector("#kw")).sendKeys("企业微信");
webDriver.findElement(By.cssSelector("#su")).click();
sleep(3000);
// 鼠标操作
// 先要创建一个Actions
Actions actions = new Actions(webDriver);
sleep(3000);
// 找到目标元素(图片这个按钮)
WebElement target = webDriver.findElement(By.cssSelector("#searchTag > div > div > a:nth-child(2) > span"));
sleep(3000);
// 鼠标挪动到这个按钮上
actions.moveToElement(target).contextClick().perform();
}
想要右键鼠标且能看到效果,就要在后面的操作中加oerform语句;
2.2 切换窗口
代码如下:
本本分代码设计到从百度首页到新闻页面之后,我们的鼠标能够顺利的在新闻页面找到输入框,这里就涉及到页面资源,我们要使用getWindowHandle()来得到当前浏览器中所有的页面资源;
private static void Test17_v2() throws InterruptedException {
// 创建一个驱动
WebDriver webDriver = new ChromeDriver();
webDriver.get("https://www.baidu.com/");
// 点击新闻按钮
webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).click();
sleep(5000);
// 获取到当前的窗口句柄
String cur_handle = webDriver.getWindowHandle();
System.out.println("当前窗口句柄等于:" + cur_handle);
// 获取到浏览器当前所有的窗口句柄
Set<String> all_handles = webDriver.getWindowHandles();
String target = "";
// 遍历当前浏览器所有的窗口句柄
for (String temp : all_handles) {
if(!temp.equals(cur_handle)) {
webDriver.switchTo().window(temp);
}
}
// 将窗口句柄切换到最后一个窗口句柄
sleep(3000);
// 找到新闻搜索框
// 输入“经济新闻头条”
webDriver.findElement(By.cssSelector("#ww")).sendKeys("经济头条");
// 点击百度一下按钮
webDriver.findElement(By.cssSelector("#s_btn_wr")).click();
// 找到搜索结果
// 如果搜索结果中包含经济或者头条,此时测试通过
sleep(3000);
List<WebElement> webElements = webDriver.findElements(By.xpath("//em[text()=\"经济\"]"));
sleep(3000);
int flag = 0;
for(int i = 0; i < webElements.size(); i++) {
if(webElements.get(i).getText().equals("经济") || webElements.get(i).getText().equals("头条")) {
flag = 1;
break;
}
}
if(flag == 1) {
System.out.println("测试通过");
} else {
System.out.println("测试不通过");
}
}
结果如下所示:
2.3 截图
通过selenium来进行截图操作:
步骤一:首先进入到中央仓库;
步骤二:搜索输入:common-io,选择下图所示:
步骤三:选择2.15.1的内容
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.15.1</version>
</dependency>
将该段代码放入到pom文件;
所以关于截图操作的代码如下所示:
File file = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
我们将我们的驱动器进行类型强制转化,在进行截图之后将该数据使用文件的形式存放起来;
private static void Test18() throws InterruptedException, IOException {
// 创建驱动
WebDriver webDriver = new ChromeDriver();
// 打开百度首页
webDriver.get("https://www.baidu.com");
// 输入“刘力菲”
webDriver.findElement(By.cssSelector("#kw")).sendKeys("刘力菲");
// 搜索
webDriver.findElement(By.cssSelector("#su")).click();
sleep(3000);
// 截图,把截得图放到了file临时变量
//此处也是进行了强制类型转换
//通过文件的形式将我们的额数据进行保存
File file = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
// 把file保存到磁盘中
FileUtils.copyFile(file, new File("D://截图2024_01_24.png"));
webDriver.quit();
}
故此代码运行成功‘;
3.定位一组元素
3.1 框的点击
选择所有的方选框;
代码如下所示:
private static void Page01() {
WebDriver webDriver = new ChromeDriver();
webDriver.get("http://localhost:63342/Selenium2024_01_20/Page/test01.html?_ijt=crt4qqbabj9uugecnbv5fr0djh&_ij_reload=RELOAD_ON_SAVE");
List<WebElement> webElements = webDriver.findElements(By.cssSelector("input"));
for(int i = 0; i < webElements.size(); i++) {
if(webElements.get(i).getAttribute("type").equals("checkbox")) {
webElements.get(i).click();
}
}
}
结果如下所示:
3.2 多框架页面
private static void Page02() throws InterruptedException { WebDriver webDriver = new ChromeDriver(); webDriver.get("http://localhost:63342/Selenium2024_01_20/Page/test02.html?_ijt=aumg7c4b16s14h3vt2atkcl1f4&_ij_reload=RELOAD_ON_SAVE"); webDriver.switchTo().frame("f1"); sleep(3000); webDriver.findElement(By.cssSelector("body > div > div > a")).click(); }
我们在面对多框架页面的时候,要在选择定位元素之前要知道该元素在那一个页面框架上,所以我们要使用switchTo.frame来进行框架的转换;
ps:本次的内容就到这里了,如果对你有所帮助的话就请一键三连哦!!!
封面截图来自刘姝贤的毕业公演的pv;
url:【流水线的流水账】江西几日游_哔哩哔哩_bilibili