Java自动化测试-UI(Web)

  • Post author:
  • Post category:java




Selenium三大组件

  • Selenium IDE,Firefox/Chrome浏览器的扩展插件,通过Selenium IDE我们可以录制和回放浏览器操作,快速实现自动化测试。
  • Selenium WebDriver,Selenium的核心,提供了各种语言环境的API来支持更多控制权和编写符合标准软件开发实践的应用程序。
  • Selenium Grid,分布式测试,通过Selenium Grid可以将自动化测试脚本分发到不同的测试机器中执行。

selenium详细介绍,查看官网

https://selenium.dev/



Selenium WebDriver



第一个web自动化测试脚本

  1. 创建Maven项目
  2. 引入selenium依赖

    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>3.141.59</version>
    </dependency>
    
  3. 下载浏览器驱动

    通过在chrome浏览器的地址栏上面输入chrome://version获取chrome版本

    下载对应的chromedriver

    https://chromedriver.storage.googleapis.com/index.html
  4. 编写自动化测试脚本

    ChromeDriver driver = new ChromeDriver();
    driver.get("https://www.baidu.com");
    

    常见问题:

    https://blog.csdn.net/m0_50026910/article/details/124162392



Selenium WebDriver原理

  • Selenium客户端(Java代码)首先启动驱动程序,调用驱动打开浏览器。
  • get访问网址/点击/输入…这些操作会通过指令发送给驱动,由驱动再次传给浏览器解释执行,通讯采用的是WebDriver协议
  • 浏览器将执行结果通知到客户端



元素定位


基础元素定位

  1. id属性定位

    By.id("XX");
    
  2. name属性定位

    By.name("XX");
    
  3. class属性定位

    By.className("XX");
    
  4. 标签名定位

    By.tagName("XX");
    
  5. 超链接完整文本定位

    By.linkText("XX");
    
  6. 超链接部分文本定位

    By.partialLinkText("XX");
    


css选择器

  1. css选择器定位

    7.1 根据标签名

    By.cssSelector("input");
    

    7.2 根据ID

    By.cssSelector("#id");
    By.cssSelector("标签名#id"); //使用html标签拼上#id
    

    7.3 根据className(样式名),.class形式

    By.cssSelector(".样式名");
    By.cssSelector("标签名.样式名"); //标签名拼上样式
    

    7.4 单属性选择定位

    By.cssSelector("标签名[属性名='属性值']");
    

    7.5 多属性选择定位

    By.cssSelector("标签名[属性1='属性值'][属性2='属性值']");
    


xpath

  1. xpath元素定位
  • xpath其实就是一个path(路径),一个描述页面元素位置信息的路径,相当于元素的坐标

  • xpath基于XML文档树状结构,是XML路径语言,用来查询xml文档中的节点

  • 既可以用于XML,也可以用于HTML

    8.1 xpath绝对定位 –不要用

    绝对路径以单/号表示,而且是让解析引擎从文档的根节点开始解析,也就是html这个节点下开始解析

    /html/body/div[2]/div/form/div[5]/button
    


    缺点


    后期维护性差


    8.2 xpath相对定位 -推荐使用


    相对路径则以//表示,则表示让解析引擎从文档的任意符合的元素节点开始进行解析


    定位方式

    • 属性定位
    //标签名[@属性名='值']
    
    • 文本定位
    //标签名[text()='值']
    
    • 模糊匹配

    属性模糊匹配

    //标签名[contains(@属性名,'值')]
    

    文本模糊匹配

    //标签名[contains(text(),'值')]  
    
    • 层级关系定位

    使用场景:

    如果通过常规的方法定位到的元素不是唯一的,那么可以考虑先通过他们不同的父级或父级的父级来定位。

    #方式一:先找父级再找对应元素
    //*[@id='father']/child
    
    #方式二:先找父级的父级...再找对应元素
    //*[@id='ancestor']//child
    
    • xpath轴定位

    以上方式都无法定位到元素的情况下,可以考虑轴定位

    轴名称 释义
    ancestor 选取当前节点的所有祖先节点(包括父节点)
    parent 选取当前节点的父节点
    preceding 选取当前节点之前的所有节点
    preceding-sibling 选取当前节点之前的所有兄弟节点–找哥哥
    following 选取当前节点之后的所有节点
    following-sibling 选取当前节点之后的所有兄弟节点–找弟弟

    使用语法:


    轴名称::标签名


    示例:

    //a[text()='登录']//parent::td
    



三大等待

  • 强制等待

    Thread.sleep(long millis);
    

    优点:使用简单

    缺点:容易造成时间浪费

  • 隐式等待

    在设置的超时时间范围内不断查找元素,直到找到元素或者超时为止

    如:设置等待时间为5秒,在第3秒找到元素,不再继续等待

    设置方式

    driver.manage.timeouts().implicitlyWait(long time, TimeUnit unit);
    

    优点:相对灵活

    缺点:

    只能等待元素存在,不能适用条件更复杂的情况,如:元素可点击、元素可见

  • 显式等待

    显式等待通常是我们自定义的一段代码,用来等待某个条件发生后再继续执行后续代码(如元素存在、元素可点击、元素可见等)

    使用方式:

    WebDriverWait wait = new WebDriverWait();
    WebElement element = wait.until(expectCondition);  //until:等待条件满足时为止
    

    优点:

    每隔一段时间扫描一次页面,检查元素是否满足等待结果条件,比如查找元素,则检查元素是否存在,不存在则继续等待,直到找到或超时。

    该方式不是全局设置,对需要等待的元素进行设置,推荐优先使用这一种方法。

方法 等待条件
presenceOfElementLocated 页面元素在页面源代码中存在
visibilityOfElementLocated 页面元素在页面存在并且可见
elementToBeClickable 页面元素是否在页面上可被单击



三大切换

持续更新中。。。



版权声明:本文为m0_50026910原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。