• Selenium系列之--11 selenide 使用


    1. 什么是 Selenide

    Selenide = UI Testing Framework powered by Selenium WebDriver, Selenide 基于Java语言,是对 selenium 的一个封装,用于编写简洁 concise 而稳定 stable 的UI测试。 官网 Github

    优点:

    • 内置隐式等待
    • 用例运行完后自动关闭浏览器
    • 代码简单,易读
    • 自动对失败用例截图

    2. 使用

    2.1 准备(首先在pom.xml中加入如下依赖)

    <!-- selenide 4.8版本对应selenium-java 3.7.1版本 -->
            <dependency>
                <groupId>com.codeborne</groupId>
                <artifactId>selenide</artifactId>
                <version>4.8</version>
            </dependency>
    

    2.2 使用

    2.2.1 常用操作

    # selenide默认使用Firefox浏览器,设置成chrome浏览器
    System.setProperty("webdriver.chrome.driver", chromeDriverPath);
    Configuration.browser = "chrome";
    
    # 设置浏览器运行完不关闭
    Configuration.holdBrowserOpen = true;
    Configuration.timeout = 6000 ;
    Configuration.timeout = 8000 ;
    
    # 修改报告默认生成路径
    Configuration.reportsFolder = "target/reports/test"+Configuration.browser;
    
    ---------------------------------------------------------------------------------------
    # 把webDriver传给selenide (注意:如果使用自己设置的driver,selenide不会自动关闭browser,需要手动关闭!)
    WebDriverRunner.setWebDriver(driver);
    
    # 获取当前driver
    WebDriverRunner.getWebDriver();
    
    # 获取当前页面url
    WebDriverRunner.url()
    
    # 返回当前页面的源HTML代码
    WebDriverRunner.source() 
    
    ---------------------------------------------------------------------------------------
    # 打开一个url:
    open("https://www.baidu.com/");
    
    # 获取当前页面title
    title()
    
    # 刷新当前页面
    refresh();
    
    # 清除浏览器cookie
    clearBrowserCookies();
    
    # 切换浏览器窗口
    switchTo().window(nameOrHandle);
    
    # 执行js
    executeJavaScript(String jsCode,Object ... arguments)
    

    2.2.2 元素定位

    selenide使用“$”符号定位一个元素(导包:import static com.codeborne.selenide.Selenide.*;)

    $(String cssSelector) - $符号默认参数是“CSS”,返回SelenideElement类的对象,SelenideElement继承WebElement,该对象表示页面上CSS选择器找到的第一个元素。
    $(By) - 由By类的定位器返回找到的第一个元素。
    $(byText(“Sign in”)) - 通过text定位
    $(byXpath("//*[text()=‘Sign in’]")) -通过Xpath定位
    $(byAttribute(“placeholder”,“房源编号”)) - 通过属性定位
    $$("#search-results a").findBy(text(“selenide.org”)) 二级查找
    

    2.2.3 元素操作

    操作 意义 说明
    click() 鼠标点击
    doubleClick() 鼠标双击
    contextClick() 鼠标右击
    hover() 悬停
    dragAndDropTo(String) 鼠标拖动操作
    setValue(String) / val(String) 文本框赋值
    pressEnter() 输入 回车键
    pressEscape() 输入 Escape 键
    pressTab() 输入 Tab 键
    selectRadio(String value) 点击单选按钮
    selectOption(String) 下拉框选择
    append(String)
    download() 下载文件的操作(默认只能下载标签的元素,若想下载其他标签里面的元素则需另外设置)
    uploadFile(file) 上传文件的操作(uploadFile的参数为File类型)

    获取元素状态和属性值的方法

    操作 意义 说明
    getValue() val()
    data()
    attr(String)
    text() 返回“页面上的可见文本”
    innerText() 返回“DOM中元素的文本”
    getSelectedOption()
    getSelectedText()
    getSelectedValue()
    isDisplayed() 如果元素被隐藏(不可见)或者DOM中不存在元素,则返回false; 否则 - 是的
    exists() 如果DOM中存在元素,返回true;否则返回false

    实际例子:

    $(byText(“Sign in”)).click() - 点击
    $(byName(“password”)).setValue(“qwerty”) - 文本输入
    $(byName(“password”)).setValue(“qwerty”).pressEnter() -文本输入后敲回车
    $(By.xpath(element)).exists() - 判断元素是否存在
    executeJavaScript(String jsCode,Object … arguments) 执行js代码
    

    2.2.4 元素集合定位和操作

    通过 “$$”定位一组元素,如下:

    $$("#search-results a") 返回ElementsCollection类型的元素集合
    对元素集合的操作

    size();
    isEmpty();
    get(int); //根据index获取元素集合中的某一个元素
    getTexts();//返回可见元素集合文本的数组,例如对于元素:<li>a</li><li hidden>b</li><li>c</li>将返回数组["a", "", "c"]  
    
    

    2.2.5 操作alert

    confirm();   //确定alert
    confirm("exceptionText");  //判断alert的文字是否是期望的那个,如果是,接收alert
    dismiss();  //取消alert
    

    2.2.6 断言

    selenide通过should来进行断言,相当于Assert。
    例子如下:

    $(“input”).should(exist) - 验证元素应该存在
    $(“input”).shouldBe(visible) - 验证元素应该可见
    $(“input”).shouldHave(exactText(“Some text”)) - 验证元素的text等于Some text
    $(“input”).shouldHave(value(“John”)) - 验证元素的value属性等于John“”
    $(“#input”).shouldHave(id(“myForm”)) - 验证元素的id属性等于“myForm”
    $("#btn-Search").shouldHave(text(“搜索”)) - 验证元素是否包含“搜索”文本
    $("#btn-Search").shouldNotHave(text(“搜索”)) - 验证元素不包含“搜索”文本
    $("#btn-Search").shouldNot(exist)  - 不存在某个元素
    
    

    断言相当于显示等待,等待的状态(visible,enabled,text(“some text”))是否满足,直到超时达到的值(默认设置为4000毫秒)。断言返回的也是元素对象本身,所以可以继续操作该元素。,例如:$("#submit").shouldBe(enabled).click();

    还可以自行明确设置超时:
    waitUntil(条件,毫秒)
    waitWhile(条件,毫秒)

    3. 源码

    3.1 学习Selenide

    学习 Selenide 最快捷的方法是打开IDE 开发环境,输入: $(selector). Selenide javadoc

    3.2 常用到的 Selenide 类:

    • com.codeborne.selenide.Selenide 核心类。主要方法有:open,$和$$

    • com.codeborne.selenide.SelenideElement 本类描述页面上找到的元素。类的对象可以通过 $ 命令来获取。有用的方法有:

    • com.codeborne.selenide.Condition Condition 主要用在 should/ shouldNot/ waitUntil/ waitWhile 等这些结构中。

    • com.codeborne.selenide.Selectors 本类相当于是原始选择器的扩赞,包含通过文本或属性来定位元素的 By选择器

    • com.codeborne.selenide.ElementsCollection 本类描述页面上找到的元素集合。通常可以通过 $$ 方法获取 ElementsCollection类的对象。有用的方法有:

    • com.codeborne.selenide.CollectionCondition Collection conditions 主要用在 shouldBe/shouldHave 等这些结构中。

    • com.codeborne.selenide.WebDriverRunner 定义了一些浏览器管理方法:url() - 返回当前URL;source() - 返回当前页面的源HTML代码

    • com.codeborne.selenide.Configuration 包含测试执行时不同的配置选项。例如: timeout - collectionsTimeout - browser - baseUrl - reportsFolder
      注意,这些配置项也可以作为系统属性传递,例如,当配置测试在CI服务器上执行时e.g. -Dselenide.baseUrl=http://staging-server.com/start

    【Quality】 Quality is the value to someone who matters。做测试,首先要找到这个someone是谁,以及这个 someone重视的 value是什么。
  • 相关阅读:
    IP和java.net.InetAddress类的使用
    Redis(五):几个常用概念
    Redis(一):概述
    mongodb写入策略(WriteConcern)
    mongodb配置详解
    MongoDB优化
    Python 多进程异常处理
    Python多进程编程-进程间协作(Queue、Lock、Semaphore、Event、Pipe)
    Mongodb 性能测试
    把 MongoDB 当成是纯内存数据库来使用(Redis 风格)
  • 原文地址:https://www.cnblogs.com/liuyitan/p/15401395.html
Copyright © 2020-2023  润新知