Java自动化测试-UI(Web)

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页面元素是否在页面上可被单击

三大切换

持续更新中。。。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值