目录
使用java语言编写自动化测试脚本(selenium webdriver):
使用selenium ide 插件:
在浏览器中打开插件,创建测试脚本
使用selenium ide可以录制一个从打开百度到搜索腾讯课堂的一个脚本文件,点击run可以自动运行
java中maven项目管理工具:
使用java语言编写自动化测试脚本(selenium webdriver):
创建maven项目:
引入selenium框架:
在生成的.xml文件中加入selenium框架代码:
<dependencies>
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
<groupid>org.seleniumhq.selenium</groupid>
<artifactid>selenium-java</artifactid>
<version>3.141.59</version>
</dependency>
</dependencies>
安装chrome浏览器驱动:
自行下载与chrome浏览器版本相匹配的chromedriver
地址:https://chromedriver.chromium.org/downloads
在脚本代码中设正确的置驱动路径:
//设置selenium webdriver启动chrome浏览器时所需的chromedriver路径
system.setproperty("webdriver.chrome.driver", "c:\\idea\\maven-project\\java01\\src\\test\\resource\\chromedriver.exe");
编写自动化脚本代码:
自动化打开网页:
public class test1 {
public static void main(string[] args) {
openchrome();
}
public static void openchrome(){
//设置selenium webdriver启动chrome浏览器时所需的chromedriver路径
system.setproperty("webdriver.chrome.driver", "c:\\idea\\maven-project\\java01\\src\\test\\resource\\chromedriver.exe");
//打开浏览器
chromedriver chromedriver=new chromedriver();
//访问百度
chromedriver.get("http://www.baidu.com");
}
}
基本元素定位:
比如我们要定位网页中哪处的代码就把鼠标放在上面右击检查
这里定位的百度一下按钮,用来查找id或name来定位元素,从而来编写web自动化代码
id名,类名,name,标签名,链接文本等定位
//定位到百度的搜索框元素,并搜数据,通过id(id名)来定位
chromedriver.findelement(by.id("kw")).sendkeys("腾讯课堂");
//定位到搜索框元素,通过name(名字)来定位
chromedriver.findelement(by.name("wd")).sendkeys("腾讯课堂");
//定位到搜索框元素,通过tagname(标签名)来定位--他找到的元素是多个,默认会找html页面中第一个,不推荐
chromedriver.findelement(by.tagname("input")).sendkeys("腾讯课堂");//会报错
//定位到搜索框元素,通过classname(类名)来定位--也可能有多个,有可能会有复合类名,需要选择其中一个唯一的一部分当做类名去定位
chromedriver.findelement(by.classname("s_ipt")).sendkeys("腾讯课堂");
//根据超链接文本来定位元素--超链接的完整文本
chromedriver.findelement(by.linktext("新闻")).click();
//根据超链接文本来定位元素--超链接的部分文本
chromedriver.findelement(by.partiallinktext("闻")).click();
cssselect元素定位,css选择器,根据css样式来选择:
//cssselect元素定位,css选择器,根据css样式来选择
//根据tagname(标签名)定位--会报错,input标签有多个
chromedriver.findelement(by.cssselector("input")).click();
//根据id(id名)定位,在后面id名前要加上#
chromedriver.findelement(by.cssselector("#kw")).sendkeys("腾讯课堂");
//根据classname(类名)定位,在后面类名前要加上.
chromedriver.findelement(by.cssselector(".s_ipt")).sendkeys("腾讯课堂");
精确定位:
元素定位xpath
相对路径
从根目录开始找,从源代码中去找他在哪个路径下
绝对路径
//css精确定位 标签名[属性名='属性值']
chromedriver.findelement(by.cssselector("input[maxlength='255']")).sendkeys("腾讯课堂");
//更精准的定位,多属性定位
chromedriver.findelement(by.cssselector("input[maxlength='255'][autocomplete='off']")).sendkeys("腾讯课堂");
//xpath元素定位,相当于元素的坐标--使用笔记里的格式,在定位多属性时和上面不同,写在一个中括号内,每个属性前都要加@
chromedriver.findelement(by.xpath("//input[@maxlength='255' and @autocomplete='off']")).sendkeys("腾讯课堂")
//xpath定位我们想获取文本关键字,完整文字
chromedriver.findelement(by.xpath("//a[text()='新闻']")).click();
//xpath定位我们想获取文本关键字,部分文字,用到contains()函数
chromedriver.findelement(by.xpath("//a[contains(text(),'o123')]")).click();
基本元素操作:
常见api:
//删除搜索框的内容
chromedriver.findelement(by.id("kw")).sendkeys("腾讯课堂");
//等待三秒
thread.sleep(3000);
//删除搜索内容--用clear方法
chromedriver.findelement(by.id("kw")).clear();
//获取元素的标签名,查看后返回值类型是webelement,用webelement去接收
webelement webelement=chromedriver.findelement(by.id("kw"));
//获取元素的标签名
system.out.println(webelement.gettagname());
//获取元素某个属性的属性值,或者链接等等
system.out.println(webelement.getattribute("maxlength"));
//先用xpath部分文本定位到元素位置,获取元素的文本值
webelement webelement1=chromedriver.findelement(by.xpath("//a[contains(text(),'库')]"));
system.out.println(webelement1.gettext());
//查看元素是否显示
system.out.println(webelement1.isdisplayed());
webdriver页面相关获取和操作:
webdriver相关api:
//getcurrenturl获取当前url链接
system.out.println(chromedriver.getcurrenturl());
//获取当前页面标题
system.out.println(chromedriver.gettitle());
//获取当前页面源代码
system.out.println(chromedriver.getpagesource());
//关闭驱动对象以及所有相关的接口
chromedriver.quit();
//close()方法,关闭当前窗口,若同时打开了多个窗口只会关闭一个当前窗口
chromedriver.findelement(by.id("kw")).sendkeys("腾讯课堂");
chromedriver.findelement(by.id("su")).click();
//句柄就相当于一个网页的身份证号,每一个网页都有一个身份证
//打开新窗口前的当前句柄
system.out.println("打开前"+chromedriver.getwindowhandle());
//打开新窗口前的所有句柄
system.out.println("打开前所有"+chromedriver.getwindowhandles());
//这里需要等待几秒,因为网页加载有时间,有可能会没有加载到导致报错
thread.sleep(1000);
chromedriver.findelement(by.name("label")).click();
thread.sleep(3000);
//打开新窗口后的当前句柄
system.out.println("打开后"+chromedriver.getwindowhandle());
//打开新窗口后的所有句柄
system.out.println("打开后所有"+chromedriver.getwindowhandles());
//chromedriver.close();
//manage()方法可以获取options-浏览器菜单操作对象,例如让浏览器全屏
webdriver.options options = chromedriver.manage();
//引用方法,浏览器全屏
//还有各种方法,例如获取页面大小,高度,宽度等等,用数据类型去接收,都可以打印下来,还有position等,x,y轴等等
options.window().fullscreen();
//navigate对象
webdriver.navigation navigation= chromedriver.navigate();
thread.sleep(3000);
//访问url,例如打开百度后去访问京东
navigation.to("http://www.jd.com");
thread.sleep(3000);
//刷新网页
navigation.refresh();
thread.sleep(3000);
//回退
navigation.back();
thread.sleep(3000);
//前进
navigation.forward();
三大等待:
硬性等待
thread.sleep(3000ms)
缺点:比如1秒能加载,这边写3秒,就会浪费2秒
隐式等待
显示等待
比隐式等待更加智能,可以设置单个元素的等待条件
//隐式等待
//在driver实例化完成之后设置隐式等待,可以设置超时时间5秒,后面是单位表示秒,不是每次都要5秒钟,只要你在5秒内反映出来都可以
//chromedriver.manage().timeouts().implicitlywait(5, timeunit.seconds);
chromedriver.get("http://www.baidu.com");
chromedriver.findelement(by.id("kw")).sendkeys("腾讯课堂");
chromedriver.findelement(by.id("su")).click();
// 硬性等待
// 如果不设置硬性等待的话,可能会来不及访问就会报错
// 缺点:比如1秒能加载,这边写3秒,就会浪费2秒
thread.sleep(3000);
// 显示等待
// 先设置一个webdriverwait对象,传入实例和超时时间
// 下面调用里面的直到什么条件的方法,这里是直到关键词显示
webdriverwait webdriverwait=new webdriverwait(chromedriver,5);
webdriverwait.until(expectedconditions.visibilityofelementlocated(by.xpath("//a[text()='_专业的在线教育平台']")));
chromedriver.findelement(by.xpath("//a[text()='_专业的在线教育平台']")).click();
特殊元素的定位和操作:
自动点击模态框
iframe框架内嵌页面切换
window窗口切换
select下拉框自动测试
时间日期控件
鼠标操作
文件上传
验证码
//访问本地的html文件,alert模态框
chromedriver.get("c:\\users\\20961\\desktop\\web自动化测试\\模态框\\alert.html");
//休眠2秒
thread.sleep(2000);
//点击按钮
chromedriver.findelement(by.id("al")).click();
//休眠2秒
thread.sleep(2000);
//找到对应的弹出框(switchto.alert),并用alert类型去接收
alert alert=chromedriver.switchto().alert();
//确认弹出框
//alert.accept();
//取消弹出框
//alert.dismiss();
//显示弹出框文本
//system.out.println(alert.gettext());
//访问本地的html文件,confirm模态框
chromedriver.get("c:\\users\\20961\\desktop\\web自动化测试\\模态框\\confirm.html");
//休眠2秒
thread.sleep(2000);
//点击按钮
chromedriver.findelement(by.id("su")).click();
//休眠2秒
thread.sleep(2000);
//找到对应的弹出框(switchto.confirm),并用alert类型去接收
alert alert=chromedriver.switchto().alert();
//确认弹出框
//alert.accept();
//取消弹出框
//alert.dismiss();
//显示弹出框文本
system.out.println(alert.gettext());
//iframe处理
chromedriver.get("c:\\users\\20961\\desktop\\web自动化测试\\iframe框架\\a.html");
//在默认输入页面找输入框输入数据
chromedriver.findelement(by.id("aa")).sendkeys("1111");
thread.sleep(3000);
//进入第一个内嵌页面定位元素,输入数据
//切换成内嵌页面
chromedriver.switchto().frame("bframe");
chromedriver.findelement(by.id("bb")).sendkeys("222");
thread.sleep(3000);
//进入第二个内嵌页面定位元素,输入数据
//切换成内嵌页面
chromedriver.switchto().frame("cframe");
chromedriver.findelement(by.id("cc")).sendkeys("333");
thread.sleep(3000);
//回到默认的页面,否则会找不到元素
chromedriver.switchto().defaultcontent();
//回到默认页面后,输入文字
chromedriver.findelement(by.id("aa")).sendkeys("回到了默认页面");
//window处理
chromedriver.get("c:\\users\\20961\\desktop\\web自动化测试\\windows切换\\a.html");
thread.sleep(2000);
chromedriver.findelement(by.id("aa")).sendkeys("第一个窗口");
//句柄
system.out.println("跳转前的句柄"+chromedriver.getwindowhandle());
//切换b窗口
chromedriver.findelement(by.id("bhre")).click();
thread.sleep(2000);
system.out.println("跳转后的句柄"+chromedriver.getwindowhandle());
//跳转前和跳转后的句柄都是一样的,所以句柄还是在a窗口中
//句柄可以视为标识浏览器窗口、标签页或页面内特定元素(如iframe、弹出对话框)的唯一标识符
//句柄的切换,先获取所有的窗口句柄,用set<string>来接收
set<string> handles= chromedriver.getwindowhandles();
//对集合进行遍历
for(string handle :handles){
//切换句柄
chromedriver.switchto().window(handle);
//如果网页的标题为b网页,则句柄切换成功
if(chromedriver.gettitle().equals("b.html")){
break;
}
}
thread.sleep(3000);
chromedriver.findelement(by.id("bb")).sendkeys("第二个窗口");
//select下拉框自动设置
chromedriver.get("c:\\users\\20961\\desktop\\ceshi\\html\\html基础语法.html");
//定位到时间下拉框
webelement webelement=chromedriver.findelement(by.id("su"));
//把webelement封装成select对象
select select=new select(webelement);
//选择上海,索引值是从0开始的
select.selectbyindex(1);
thread.sleep(3000);
//根据文字选择下拉框中的选项
select.selectbyvisibletext("南京");
//时间日期控件自动定位和操作
chromedriver.get("https://www.fliggy.com/");
//不限制输入,直接在输入框输入时间
chromedriver.findelement(by.id("form_depdate")).sendkeys("2024,5,14");
//限制输入,只能选择时间
//
//
//鼠标操作
chromedriver.get("https://www.treejs.cn/v3/demo/cn/exedit/drag.html");
//原来的元素定位
webelement sourceelement= chromedriver.findelement(by.id("treedemo_2_a"));
//目标元素的定位
webelement targetelement=chromedriver.findelement(by.id("treedemo_3_span"));
//实例化actions对象,鼠标的相关操作
actions actions=new actions(chromedriver);
thread.sleep(3000);
//clickandhold点击然后按住原元素,move移动到目标元素的位置上,.release().build().perform()最后三个是固定的
actions.clickandhold(sourceelement).movetoelement(targetelement).release().build().perform();
//文件上传
//input写入文件路径上传,用sendkeys上传
chromedriver.get("c:\\users\\20961\\desktop\\web自动化测试\\文件上传\\文件上传.html");
thread.sleep(3000);
chromedriver.findelement(by.id("aa")).sendkeys("c:\\users\\20961\\desktop\\web自动化测试\\文件上传\\r.jpg");
//上传
chromedriver.findelement(by.id("bb")).click();
//第三方控件上传文件:autoit
//验证码
//万能验证码
发表评论