最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java?Selenide?簡(jiǎn)介與用法

 更新時(shí)間:2022年01月21日 09:12:16   作者:Juno3550  
Selenium?是目前用的最廣泛的Web?UI?自動(dòng)化測(cè)試框架,本文給大家介紹下Java?Selenide使用,感興趣的朋友一起看看吧

Selenide 介紹

Selenide github

Selenide 官方文檔

什么是selenium

一套軟件工具,用來(lái)支持不同的自動(dòng)化測(cè)試方法

開源軟件:可以根據(jù)需要來(lái)增加重構(gòu)工具的某些功能

跨平臺(tái):linux , windows mac

核心功能就是可以在多個(gè)瀏覽器上進(jìn)行自動(dòng)化測(cè)試

支持多種編程語(yǔ)言

目前已經(jīng)被google , 百度, 騰訊等公司廣泛使用

能夠?qū)崿F(xiàn)類似商業(yè)工具的大部分功能,并且還實(shí)現(xiàn)了商業(yè)工具不能支持的功能

建議大家整體學(xué)習(xí)整套工具, 將來(lái)好選擇適合自己測(cè)試目的的測(cè)試工具。

Selenide 是對(duì) Selenium 的一個(gè)封裝,其語(yǔ)法更加簡(jiǎn)單。其優(yōu)點(diǎn)如下:

  • 代碼簡(jiǎn)單、易讀
  • 內(nèi)置隱式等待(無(wú)需考慮元素的等待時(shí)間)
  • 用例運(yùn)行完后自動(dòng)關(guān)閉瀏覽器
  • 自動(dòng)對(duì)失敗用例截圖
  • 由于是對(duì) Selenium 的封裝,所以可以和 Selenium 一起使用
  • ...

Selenide 的團(tuán)隊(duì)自詡它是一個(gè)測(cè)試工具而不是一個(gè)測(cè)試框架,因?yàn)樗皇?Webdriver 的一個(gè)封裝(目前只有 Java 版本),其底層的實(shí)現(xiàn)還是 Webdriver。所以他們認(rèn)為并沒(méi)有偉大到開發(fā)了一個(gè)測(cè)試框架,而僅僅是個(gè)測(cè)試工具(很謙虛的說(shuō))。

所以一切 Webdriver 能做的,Selenide 都能做。Webdriver 做不到的,也別指望 Selenide 能做到。

就像團(tuán)隊(duì)人員說(shuō)的“Selenide is just a wrapper”,如果你不想使用 Selenide 了,或者 Selenide 滿足不了你的需要,你大可以通過(guò)以下方式獲取一個(gè) Webdriver,直接操作 Webdriver 的 API 。

driver = WebDriverRunner.getWebDriver();

所以如果有小伙伴擔(dān)心這個(gè)新興的工具沒(méi)有強(qiáng)大到滿足你的項(xiàng)目需求怎么辦?大可以放心,最壞的情況也就是直接用 Webdriver 去做就好了。

官方快速入門

Maven 依賴:

不同版本的 Selenide 所兼容的 selenium 版本不同(如 Selenide 5 對(duì)應(yīng) selenium 4)。

不同版本的 Selenide 所默認(rèn)支持的瀏覽器版本范圍也不同。

 <dependency>
            <groupId>com.codeborne</groupId>
            <artifactId>selenide</artifactId>
            <version>5.25.1</version>
        </dependency>

測(cè)試代碼:

@Test
public void testBaiduSearch() {
   open("https://www.baidu.com");
   $(By.name("username")).setValue("johny");
   $("#submit").click();
   $(".success-message").shouldHave(text("Hello, Johny!"));
}

前面說(shuō)了 Selenide 致力于封裝更簡(jiǎn)單好用的 API,所以開啟和關(guān)閉瀏覽器這些東西它都幫你做好了。

Selenide 默認(rèn)使用 Firefox 瀏覽器,如果你要使用其他瀏覽器可以手動(dòng)設(shè)置:

Configuration.browser="chrome";
// 如果默認(rèn)chrome版本不兼容,可以在環(huán)境變量中設(shè)置 chrome 瀏覽器的路徑
System.setProperty("webdriver.chrome.driver", Constant.getChromeDriverPath());
// 手動(dòng)設(shè)置 chrome 瀏覽器的路徑
System.setProperty("webdriver.chrome.driver", "e:\\chromedriver.exe");

元素定位

Selenide 使用$符號(hào)定位一個(gè)元素,使用 IDEA 時(shí)只要輸入“$(by”就可以通過(guò)代碼提示來(lái)找到我們想要的方法。如下圖:

// $ 符號(hào)默認(rèn)參數(shù)是 CSS 定位表達(dá)式,返回 SelenideElement 類的對(duì)象,SelenideElement 繼承 WebElement,該對(duì)象表示頁(yè)面上 CSS 選擇器找到的第一個(gè)元素
$(String cssSelector)

// 輸出的元素: "<option value=livemail.ru checked=true selected:true>@livemail.ru</option>"
System.out.println($("#customerContainer"));

// 通過(guò)元素 id 定位
$("#id")
$(byId("id"))

// 通過(guò) class 定位
$(".className")
$(byClassName(".className"))

// 通過(guò) name 定位
$(byName("name"))

// 通過(guò) text 定位。如果使用 selenium 的話只能用小 path 的寫法,如 driver.findElementByXpath(“//*[text()=‘Sign in']”)
$(byText("Sign in"))

// 通過(guò)Xpath定位
$(byXpath("http://*[text()='Sign in']"))

// 通過(guò)元素的屬性定位
$(byAttribute("placeholder", "房源編號(hào)"))

// $$ 用于定位一組元素(返回 ElementsCollection 類型的元素集合),且可以再在集合中繼續(xù)定位元素
$$("#search-results a").findBy(text("selenide.org"))

元素操作

元素操作:

click()  // 點(diǎn)擊
doubleClick()  // 雙擊
contextClick()
hover()
setValue(String)/val(String)  // 文本輸入
pressEnter()  // 回車鍵
pressEscape()
pressTab()
selectRadio(String value)
selectOption(String)
append(String)
dragAndDropTo(String)

獲取元素狀態(tài)和屬性值:

getValue()/val()
data()
attr(String)
text()  // 返回頁(yè)面上的可見(jiàn)文本
innerText()  // 返回 DOM 中元素的文本
getSelectedOption()
getSelectedText()
getSelectedValue()
isDisplayed()  // 如果元素被隱藏(不可見(jiàn))或者 DOM 中不存在元素,則返回 false
exists()  // 如果 DOM 中存在元素,則返回 true

瀏覽器操作

// 打開瀏覽器(如果尚未打開)并加載URL
open(String URL);

// 切換瀏覽器窗口
switchTo().window(1);

// 刷新
refresh();

// 線程等待
sleep();

// 操作 alert
confirm();  // 確定 alert
confirm("exceptionText");  // 判斷alert的文字是否是期望的那個(gè),如果是則接收 alert
dismiss();  // 取消 alert

斷言

Selenide 通過(guò) should 來(lái)進(jìn)行斷言,相當(dāng)于 Assert 。

示例如下:

$("input").should(exist);  // 驗(yàn)證元素應(yīng)該存在

$("input").shouldBe(visible);  // 驗(yàn)證元素應(yīng)該可見(jiàn)

$("input").shouldHave(exactText("Some text"));  // 驗(yàn)證元素的 text 是否包含 Some text

$("input").shouldHave(value("John"));  // 驗(yàn)證元素的 value 屬性等于 John

$("#input").shouldHave(id("myForm"));  // 驗(yàn)證元素的 id 屬性等于 myForm

$("#btn-Search").shouldHave(text("搜索"));  // 驗(yàn)證元素是否包含“搜索”文本

$("#btn-Search").shouldNotHave(text("搜索"));  // 驗(yàn)證元素不包含“搜索”文本

$("#customerContainer").should(matchText("profile"));  // 使用正則表達(dá)式:是否包含“profile”文本

還可以使用斷言來(lái)做顯示等待,等待的狀態(tài)(visible、enabled、text(“some text”))是否滿足,直到超時(shí)達(dá)到的值(默認(rèn)設(shè)置為 4000 毫秒),例如:

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

還可以明確設(shè)置超時(shí):

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

常用配置

// 把 webDriver 傳給 selenide
setWebDriver(driver);

// 獲取當(dāng)前 driver
WebDriverRunner.getWebDriver();

// 設(shè)置瀏覽器運(yùn)行完不關(guān)閉
Configuration.holdBrowserOpen = true;

// 修改報(bào)告默認(rèn)生成路徑
Configuration.reportsFolder = "target/reports/test"+Configuration.browser;

// 設(shè)置遠(yuǎn)程服務(wù)器(如selenium Grid Hub)
Configuration.remote = "http://xxxxxxx";

// selenide 默認(rèn)使用 Firefox 瀏覽器,可以手動(dòng)設(shè)置使用其他瀏覽器
System.setProperty("webdriver.chrome.driver", chromeDriverPath);
Configuration.browser = "chrome";

// selenide 自動(dòng)對(duì)于失敗用例進(jìn)行截圖,默認(rèn)保存在 build/report 里面

Selenide 和 Webdriver 對(duì)比

創(chuàng)建 webdriver 的方式:

// webdriver
DesiredCapabilities desiredCapabilities = DesiredCapabilities.htmlUnit();
desiredCapabilities.setCapability(HtmlUnitDriver.INVALIDSELECTIONERROR, true);
desiredCapabilities.setCapability(HtmlUnitDriver.INVALIDXPATHERROR, false);
desiredCapabilities.setJavascriptEnabled(true);
WebDriver driver = new HtmlUnitDriver(desiredCapabilities);

// selenide
open("/my-application/login");

Selenide 直接在open 這個(gè) API 里就啟動(dòng)瀏覽器了,當(dāng)測(cè)試結(jié)束時(shí)就會(huì)關(guān)閉瀏覽器。

查詢頁(yè)面元素:

// webdriver
WebElement customer = driver.findElement(By.id("customerContainer"));

// selenide
WebElement customer = $(By.id("customerContainer"));

這方面倒沒(méi)有什么特別簡(jiǎn)化的,但是 selenide 有其他更靈活的方式搜尋控件,例如 byText、byValue 等等,這些在 webdriver 中除非用 xpath,否則是做不到的。

// selenide
WebElement customer = $(byText("Customer profile"));
WebElement temp = $(byValue("不使用")).click();
WebElement temp1 = $(byAttribute("data-name",“test name”)).click();

再看看下面一個(gè),如果返回多個(gè)元素,取其中一個(gè):

// webdriver
driver.findElements(By.tagName("li")).get(5);

// selenide
$("li", 5);  // 取一個(gè)元素:取所有標(biāo)簽為li的元素中的第5個(gè)
$$("#multirowTable tr").filterBy(text("Norris"));  // 取一個(gè)集合:取特定的集合后再去搜尋text為期望值的元素

斷言控件:

// webdriver
assertEquals("Customer profile", driver.findElement(By.id("customerContainer")).getText());

// selenide
$("#customerContainer").shouldHave(text("Customer profile"));

Selenide 提供一系列 should 標(biāo)簽幫我們做斷言的工作,而且有一批text()的這種選擇器來(lái)幫助我們斷言各種類型。上面的例子就是斷言控件是否有期望的 text 。

Selenide 專門有一個(gè) condition 包,里面有各種各樣的 condition,這些 condition 就是 should 標(biāo)簽的參數(shù)。上面的例子 text 就是一個(gè) condition,其他的還有 id、value、attribute、readonly 等等。

等待控件:

有些時(shí)候?yàn)榱嗽黾臃€(wěn)定性,我們需要增加等待一個(gè)控件出現(xiàn)的機(jī)制。因?yàn)榭丶赡懿皇橇⒖坛霈F(xiàn)的,或者說(shuō)等待一個(gè)控件的某個(gè)屬性變成一個(gè)特定值。

// webdriver
FluentWait<By> fluentWait = new FluentWait<By>(By.tagName("TEXTAREA"));
fluentWait.pollingEvery(100, TimeUnit.MILLISECONDS);
fluentWait.withTimeout(1000, TimeUnit.MILLISECONDS);
fluentWait.until(new Predicate<By>() {
    public boolean apply(By by) {
        try {
            return browser.findElement(by).isDisplayed();
        } catch (NoSuchElementException ex) {
            return false;
        }
    }
});
assertEquals("John", browser.findElement(By.tagName("TEXTAREA")).getAttribute("value"));

// selenide
$("TEXTAREA").shouldHave(value("John"));

可以看到 Selenide 一個(gè) should 的 API 搞定了。它默認(rèn) 4s 超時(shí),4s 內(nèi)會(huì)循環(huán) check 控件的 value 是否變成了期望值。同樣的還有 text、attribute 等選擇器。

正則表達(dá)式:

// webdriver
WebElement element = driver.findElement(By.id("customerContainer"));
assertTrue(Pattern.compile(".*profile.*", DOTALL).matcher(element.getText()).matches());

// selenide
$("#customerContainer").should(matchText("profile"));

關(guān)于 alert :

// webdriver
try {
     Alert alert = checkAlertMessage(expectedConfirmationText);
     alert.accept();
   } catch (UnsupportedOperationException alertIsNotSupportedInHtmlUnit) {
     return;
   }
   Thread.sleep(200); // sometimes it will fail

// selenide
confirm("Are you sure to delete your profile?");
// 或者
dismiss("Are you sure to delete your profile?");

到此這篇關(guān)于Java Selenide 介紹與使用的文章就介紹到這了,更多相關(guān)Java Selenide 使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot使用logback文件查看錯(cuò)誤日志過(guò)程詳解

    springboot使用logback文件查看錯(cuò)誤日志過(guò)程詳解

    這篇文章主要介紹了springboot使用logback文件查看錯(cuò)誤日志過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 一文詳解如何在Java中啟動(dòng)線程

    一文詳解如何在Java中啟動(dòng)線程

    今天要跟大家聊一聊Java多線程的原理和使用方式,Java多線程是提高程序性能的重要機(jī)制,了解線程生命周期、同步機(jī)制、線程池和線程間通信等概念,可以幫助我們編寫出高效、可靠的多線程程序,需要的朋友可以參考下
    2024-07-07
  • Java集合框架概覽之ArrayList源碼刨析

    Java集合框架概覽之ArrayList源碼刨析

    本文主要從一個(gè)簡(jiǎn)單的代碼入手,對(duì)ArrayList?的最常用的源碼進(jìn)行刨析,文中源碼摘自?JDK1.8,源碼的注釋部分博主也加入了自己的翻譯,歡迎讀者食用
    2023-03-03
  • Java中Integer兩種轉(zhuǎn)int方法比較

    Java中Integer兩種轉(zhuǎn)int方法比較

    本文主要介紹了Java Integer兩種轉(zhuǎn)int方法比較。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • Java BIO,NIO,AIO總結(jié)

    Java BIO,NIO,AIO總結(jié)

    這篇文章主要介紹了Java BIO,NIO,AIO的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-09-09
  • java對(duì)同一個(gè)文件進(jìn)行讀寫操作方法

    java對(duì)同一個(gè)文件進(jìn)行讀寫操作方法

    在本篇文章里我們給大家詳細(xì)講述了java對(duì)同一個(gè)文件進(jìn)行讀寫操作的方法和知識(shí)點(diǎn),需要的朋友們可以參考學(xué)習(xí)下。
    2018-10-10
  • Springboot在IDEA熱部署的配置方法

    Springboot在IDEA熱部署的配置方法

    這篇文章主要介紹了Springboot在IDEA熱部署的配置方法,給大家補(bǔ)充介紹了Intellij IDEA 4種配置熱部署的方法,需要的朋友可以參考下
    2018-04-04
  • JavaWeb購(gòu)物車項(xiàng)目開發(fā)實(shí)戰(zhàn)指南

    JavaWeb購(gòu)物車項(xiàng)目開發(fā)實(shí)戰(zhàn)指南

    之前沒(méi)有接觸過(guò)購(gòu)物車的東東,也不知道購(gòu)物車應(yīng)該怎么做,所以在查詢了很多資料,總結(jié)一下購(gòu)物車的功能實(shí)現(xiàn),下面這篇文章主要給大家介紹了關(guān)于JavaWeb購(gòu)物車項(xiàng)目開發(fā)的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • Spring實(shí)戰(zhàn)之方法級(jí)別緩存用法示例

    Spring實(shí)戰(zhàn)之方法級(jí)別緩存用法示例

    這篇文章主要介紹了Spring實(shí)戰(zhàn)之方法級(jí)別緩存用法,結(jié)合實(shí)例形式分析了spring方法級(jí)別緩存配置、屬性文件、領(lǐng)域模型及相關(guān)使用技巧,需要的朋友可以參考下
    2020-01-01
  • springboot整合netty過(guò)程詳解

    springboot整合netty過(guò)程詳解

    這篇文章主要介紹了springboot整合netty過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12

最新評(píng)論

丹棱县| 汪清县| 五家渠市| 安福县| 汕尾市| 庄河市| 岑巩县| 河南省| 武强县| 定安县| 济宁市| 金湖县| 遂溪县| 杂多县| 迁西县| 时尚| 建始县| 白城市| 福安市| 交城县| 日土县| 临漳县| 大石桥市| 长治市| 濮阳市| 西峡县| 石柱| 塔河县| 景谷| 维西| 合阳县| 晋城| 阳新县| 扎鲁特旗| 柘城县| 西和县| 湖州市| 玉林市| 拜泉县| 盐池县| 霍林郭勒市|