0


web自动化测试(java+selenium)

使用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

标签: java selenium

本文转载自: https://blog.csdn.net/ccccccshen/article/details/138687632
版权归原作者 编程菜鸡儿 所有, 如有侵权,请联系我们删除。

“web自动化测试(java+selenium)”的评论:

还没有评论