当前位置: 代码网 > it编程>编程语言>Java > web自动化测试(java+selenium)

web自动化测试(java+selenium)

2024年08月03日 Java 我要评论
自动化测试插件使用,脚本代码的编写

目录

使用selenium ide 插件:

java中maven项目管理工具:

使用java语言编写自动化测试脚本(selenium webdriver):

创建maven项目:

引入selenium框架:

安装chrome浏览器驱动:

编写自动化脚本代码:

自动化打开网页:

基本元素定位:

基本元素操作:

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
    //验证码
    //万能验证码

完整代码:https://github.com/developerwhite/selenium

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com