【selenium】selenide使用总结

简介:selenide是对selenium的一个封装,使用了更简单的写法,无需考虑元素的等待时间。
优点:

  • 内置隐式等待
  • 用例运行完后自动关闭浏览器
  • 代码简单,易读
  • 自动对失败用例截图
  • 由于是对selenium的封装,所以可以和selenium一起使用

官方文档https://selenide.org/documentation.html

安装

maven项目在pom.xml添加如下依赖即可

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

元素定位

selenide使用“$”符号定位一个元素(导包:import static com.codeborne.selenide.Selenide.*;),使用IDEA写代码是只要
输入 $ (by 就可以通过代码提示来找到我们想要的方法了,如下图:
【selenium】selenide使用总结

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

元素操作

selenide对元素的操作有如下这些:

click()
doubleClick()
contextClick()
hover()
setValue(String) / val(String)
pressEnter()
pressEscape()
pressTab()
selectRadio(String value)
selectOption(String)
append(String)
dragAndDropTo(String)
...

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

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

实际例子:

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

元素集合定位

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

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

对元素集合的操作

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

浏览器操作

  • 打开浏览器(如果尚未打开)并加载URL
open(String URL);
  • 切换浏览器窗口
switchTo().window(1);
  • 刷新
refresh();
  • 线程等待
sleep();
  • 操作alert
confirm();   //确定alert
confirm("exceptionText");  //判断alert的文字是否是期望的那个,如果是,接收alert
dismiss();  //取消alert

断言

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(“搜索”)) - 验证元素不包含“搜索”文本

还可以使用断言来做显示等待,等待的状态(visible,enabled,text(“some text”))是否满足,直到超时达到的值(默认设置为4000毫秒),例如:

$("#submit").shouldBe(enabled).click();

还可以明确设置超时:

waitUntil(条件,毫秒)
waitWhile(条件,毫秒)

常用配置

  • 把webDriver传给selenide
setWebDriver(driver);
  • 获取当前driver
WebDriverRunner.getWebDriver();
  • 设置浏览器运行完不关闭
Configuration.holdBrowserOpen = true;
  • 修改报告默认生成路径
Configuration.reportsFolder = "target/reports/test"+Configuration.browser;
  • selenide默认使用Firefox浏览器,设置成chrome浏览器
System.setProperty("webdriver.chrome.driver", chromeDriverPath);
Configuration.browser="chrome";