极简主义 Selenide

本贴最后更新于 970 天前,其中的信息可能已经事过景迁

1、什么是Selenide?

Selenide是由Selenium WebDriver二次封装的Web自动化框架,具有以下优点:
1. 简洁流畅的API 
2. Ajax支持
3. 强大的选择器
4. 简单的配置
5. 您无需考虑如何关闭浏览器、处理超时和 StaleElement 异常或搜索相关日志行、调试测试。

2、快速上手

2.1、maven坐标

<!-- selenide  -->
<dependency>
    <groupId>com.codeborne</groupId>
    <artifactId>selenide</artifactId>
    <version>5.23.1</version>
</dependency>
<!-- testng  -->
<dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>7.0.0</version>
</dependency>

2.2、代码

2.2.1、静态导入
import static com.codeborne.selenide.Selenide.*;
import static com.codeborne.selenide.Condition.*;
2.2.2、测试代码
public class Demo {

   @Test
   public void test() throws InterruptedException {
      open("https://www.baidu.com");
      $("#kw").setValue("柠檬班");
      $("#su").click();
      $$(".c-abstract").get(0).shouldHave(text("柠檬班"));
   }
}

何如?是不是非常简单,都不需要下载浏览器驱动,也不需要在代码中设置浏览器驱动,使用selenide直接上代码干就是。

3、API介绍

3.1、 Selenide核心类com.codeborne.selenide.Selenide API介绍

通常,用$符号获取 SelenideElement 对象时,可以对其执行一些操作:

//单个点击操作
$(byText("Sign in")).click();
//甚至同时执行多个操作:设置值+回车
$(byName("password")).setValue("qwerty").pressEnter();
//或者你可以检查一些条件:
$(".welcome-message").shouldHave(text("Welcome, user!")).
//当所需元素是相同类型的元素时,“Double Dollar $$命令会很有用。
//例如这个例子:
$(byXpath("//*[@id='search-results']//a[contains(text(),'selenide.org')]")).click();
//您可以使用更具可读性和详细性的替代方案:
$$("#search-results a").findBy(text("selenide.org")).click();
//$和$$命令获取的大多数元素操作都有内置的隐式等待。

3.2、 Selenide核心类com.codeborne.selenide.SelenideElement API介绍

SelenideElement描述的页面上找到的元素,通过$命令来获取这个类的对象。类中定义了以下有用的方法。

3.2.1、内部元素搜索方法
find(String cssSelector) / $(String cssSelector)
find(By) / $(By)
findAll(String cssSelector) / $$(String cssSelector)
findAll(By) / $$(By)
//这里$和$$只是相应地更简洁的find和findAll方法的“别名” 。

因此,您可以逐步指定搜索路径,构建“定位器链”:

$("#header").find("#menu").findAll(".item")
3.2.2、检查元素状态的方法 - 断言

我们建议选择方便的别名,这样代码行就可以像普通的英语短语一样轻松阅读,例如:

$("input").should(exist);  
$("input").shouldBe(visible);
$("input").shouldHave(exactText("Some text"));

Selenide 断言 Condition 采用显示等待,等待条件 ( visible, enabled, text("some text")) 直到达到超时(Configuration.timeout默认设置为 4000 毫秒)。

如果需要单独实现显示等待,可以使用should-methods以在相应操作之前等待元素所需的状态,例如:

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

还可以明确设置超时:

$("input").shouldBe(visible, Duration.ofSeconds(30));
3.2.3、对元素操作的方法:
click()
doubleClick()
contextClick()
hover()
setValue(String) / val(String)
pressEnter()
pressEscape()
pressTab()
selectRadio(String value)
selectOption(String)
append(String)
dragAndDropTo(String)

大多数的操作返回SelenideElement允许生成简洁方法链对象:

$("#edit").setValue("text").pressEnter();
3.2.4、获取元素状态和属性值的方法:
getValue() / val()
data()
attr(String)
text() // 返回“页面上的可见文本”
innerText() // 返回“DOM 中元素的文本”
getSelectedOption()
getSelectedText()
getSelectedValue()
isDisplayed()//返回false,如果元素被隐藏(不可见)或者元素在DOM中不存在;否则 - 真
exists() //返回真,如果元素存在于DOM中,否则-假
回帖
请输入回帖内容 ...