selenide_使用Selenide进行有效的UI测试
selenide
等待奇跡
圣誕節是奇跡的時刻。 在新的一年的前夕,我們都會制定下一個計劃。 我們希望所有問題都將在最后一年消失,在來年出現奇跡。
每個Java開發人員都夢想著奇跡,使他成為世界上最有效的Java開發人員。
我想向你展示這樣的奇跡。
這就是所謂的自動化測試 !
tests,測試?
是。 借助micro / pico / nano服務,您不會成為真正的主人。 多虧紀律,您才能成為真正的主人。 紀律聲稱,開發人員僅在編寫和運行代碼和測試時才報告作業完成 。
但是,測試不是很無聊嗎?
哦,不,相信我! 對于最聰明的人來說,編寫快速 , 穩定的自動化測試是一個巨大的挑戰。 這可能非常有趣。 您只需要使用正確的工具。
編寫UI測試的正確工具是:
Selenium化物
Selenide是一個開放源代碼庫,用于編寫簡潔而穩定的UI測試。
Selenide是軟件開發人員的理想選擇,因為它的學習曲線非常低。 因此,您不必費心瀏覽器詳細信息,所有這些典型的ajax和時間問題,而這些時間和問題都占用了QA自動化工程師的大部分時間。
讓我們看一個最簡單的Selenide測試:
public class GoogleTest {@Testpublic void user_can_search_everything_in_google() {open("http://google.com/ncr");$(By.name("q")).val("selenide").pressEnter();$$("#ires .g").shouldHave(size(10));$("#ires .g").shouldBe(visible).shouldHave(text("Selenide: concise UI tests in Java"),text("selenide.org"));} }讓我們仔細看看這里發生的情況。
- 您只需open(url)一個命令即可open(url) 瀏覽器 open(url)
- 您可以在命令$的頁面上找到一個元素 。
您可以按名稱,ID,CSS選擇器,屬性,xpath甚至按文本查找元素。 - 您可以操縱該元素 :使用val()輸入一些文本,然后使用(surprise-surprise!) pressEnter()按Enter。
- 您檢查結果 :用$$找到所有找到的結果(它返回所有匹配元素的集合)。 您檢查集合的大小和內容。
這個測試不容易閱讀嗎? 這個測試不容易編寫嗎?
我相信是。
深入細節
Ajax /時序問題
如今,Web應用程序是動態的。 每個應用程序都可以隨時動態呈現/更改。 這給自動化測試帶來了很多問題。 今天測試為綠色的測試隨時可能突然變成紅色,這是因為瀏覽器執行某些JavaScript的時間比平常更長。
這真是ajjaxx的痛苦 。
令人難以置信的是,Selenide以非常簡單的方式解決了大多數這些問題。
簡而言之, 如果需要 ,每種Selenide方法都會等待一點。 人們稱其為“智能等待”。
當你寫:
$("#menu").shouldHave(text("Hello"));Selenide檢查元素是否存在并包含文本“ Hello”。
如果還沒有,Selenide假定該元素可能很快就會動態更新,并稍等片刻,直到它發生。 默認超時為4秒,通常對于大多數Web應用程序來說足夠了。 當然,它是可配置的。
豐富的匹配器
您可以使用Selenide檢查幾乎所有內容。 使用上面提到的“智能等待”機制。
例如,您可以檢查元素是否存在。 如果還沒有,Selenide將等待最多 4秒鐘。
$(".loading_progress").shouldBe(visible);您甚至可以檢查該元素不存在。 如果仍然存在,Selenide將等待4秒鐘,直到消失。
$(By.name("gender")).should(disappear);而且,您可以使用流利的API和鏈方法來簡化測試:
$("#menu").shouldHave(text("Hello"), text("John!")).shouldBe(enabled, selected);館藏
Selenide允許您使用集合,因此只需一行代碼即可檢查許多元素。
例如,您可以檢查頁面上是否確實有N個元素:
$$(".error").shouldHave(size(3));您可以找到集合的子集:
$$("#employees tbody tr").filter(visible).shouldHave(size(4));您可以檢查元素的文本。 在大多數情況下,檢查整個表或表行就足夠了:
$$("#employees tbody tr").shouldHave(texts("John Belushi","Bruce Willis","John Malkovich") );上傳/下載文件
使用Selenide上傳文件非常簡單:
$("#cv").uploadFile(new File("cv.doc"));您甚至可以一次上傳多個文件:
$("#cv").uploadFile(new File("cv1.doc"),new File("cv2.doc"),new File("cv3.doc") );下載文件非常簡單:
File pdf = $(".btn#cv").download();測試“高度動態”的Web應用程序
一些Web框架(例如GWT)生成HTML絕對不可讀。 元素沒有恒定的ID或名稱。
這是xpathh中的真正痛苦 。
Selenide建議通過按文本搜索元素來解決此問題。
import static com.codeborne.selenide.Selectors.*;$(byText("Hello, Devoxx!")) // find by the whole text.shouldBe(visible);$(withText("oxx")) // find by substring.shouldHave(text("Hello, Devoxx!"));通過文本搜索根本不是一個壞主意。 實際上,我喜歡它,因為它模擬了真實用戶的行為。 實際用戶無法通過ID或XPATH找到按鈕,而是通過文本(或者顏色)找到按鈕。
另一套有用的Selenide方法使您可以在父母和孩子之間導航。
$("td").parent() $("td").closest("tr") $(".btn").closest(".modal") $("div").find(By.name("q"))例如,您可以按文本找到表格單元格,然后按其最接近的tr后裔找到表格單元格,并在此表格行內找到“保存”按鈕:
$("table#employees").find(byText("Joshua")).closest("tr.employee").find(byValue("Save")).click();…和許多其他功能
Selenide具有更多功能,例如:
$("div").scrollTo(); $("div").innerText(); $("div").innerHtml(); $("div").exists(); $("select").isImage(); $("select").getSelectedText(); $("select").getSelectedValue(); $("div").doubleClick(); $("div").contextClick(); $("div").hover(); $("div").dragAndDrop() zoom(2.5); ...但好消息是您不需要記住所有這些東西。 只需放入$,放入點,然后從IDE建議的可用選項中進行選擇。
使用IDE的力量! 專注于業務邏輯。
讓世界更美好
我相信,當所有開發人員都開始為其代碼編寫自動化測試時,World會變得更好。 當開發人員在17:00起床去看孩子時,不用擔心他們在最后的改動后會破壞某些東西。
讓我們通過編寫自動化測試來改善世界!
提供工作軟件。
翻譯自: https://www.javacodegeeks.com/2015/12/effective-ui-tests-selenide.html
selenide
總結
以上是生活随笔為你收集整理的selenide_使用Selenide进行有效的UI测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 金辉城备案价(金辉城备案)
- 下一篇: 实践与反思_在行动中反思的实践