溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何組建高效的開源測試框架之getElement

發(fā)布時間:2020-07-08 06:00:06 來源:網(wǎng)絡(luò) 閱讀:453 作者:AnthonyGao1105 欄目:軟件技術(shù)

    好長一段時間沒有寫技術(shù)博客了,渾渾噩噩的過了這么多日子,一直處于瞎忙的狀態(tài),荒廢了好多時光。今天靜下來想想,繼續(xù)上路。


    之前有記錄了關(guān)于怎樣搭建webdriver的測試環(huán)境,也記錄了一些小技巧,也給出實例怎樣真正開始動手寫一個自動化測試的case.但是真正的自動化測試項目中,只會那些還是遠(yuǎn)遠(yuǎn)不夠的,細(xì)想一下,如果每一個步驟要有driver.findElement只論可讀性的話就該夠你喝一壺的了,更別談維護(hù)了。這時腦子上燈突然閃了下,貌似你好像有了些靈感,那些重復(fù)的語句,可以封裝嗎?那么我們就先從findElement的方法開始我們的框架設(shè)計之旅。

    我們首先來看看原生的webdriver找元素的方法,以id為例: driver.findElement(By.id(" ")),暫時拋開driver, findElement方法中包含了2個部分By 和id(元素的屬性)By是原生的關(guān)鍵字,這里我們也先不動它,我們先從id入手,其實不光id,有很多通過元素屬性找元素的方法,比如: id,name,cssSelector,xpath,linkText,tagName等等等。。

這里我們就可以做文章了,比如我們實例化一個By locator 的方法,把有可能用到的元素屬性都列在里面,根據(jù)用戶提供的元素屬性的不同調(diào)用不同的方法,元素屬性包含2個部分:屬性名稱,屬性value中間可用‘:’隔開。

1. 如果用戶的輸入沒有‘:’,那么默認(rèn)調(diào)用By.id()方法

2. 如果用戶的輸入包含':',那么根據(jù)實際情況來判斷,通過‘:’把元素用戶輸入分開,通過':'左邊分離出來的字符串來判斷具體的調(diào)用方法。通過‘:’右邊分離出來的字符串來傳入實際的屬性value


public static By locator(String locator) {

if (!locator.contains(":")) {

return By.id(locator);

} else {

String[] lArr = locator.split(":");

String by = lArr[0];

                        //取到冒號后面的具體的元素屬性

String using =locator.substring(by.length()+1);

if (by.equalsIgnoreCase("id")) {

return By.id(using);

} else if (by.equalsIgnoreCase("name")) {

return By.name(using);

} else if (by.equalsIgnoreCase("xpath")) {

return By.xpath(using);

} else if (by.equalsIgnoreCase("cssSelector")) {

return By.cssSelector(using);

} else if (by.equalsIgnoreCase("linkText")) {

return By.linkText(using);

} else if (by.equalsIgnoreCase("partialLinkText")) {

return By.partialLinkText(using);

} else if (by.equalsIgnoreCase("tagName")) {

return By.tagName(using);

} else if (by.equalsIgnoreCase("className")) {

return By.className(using);

} else {

         

throw new IllegalArgumentException("Cannot find elements when name text is null.");

}

}

}

3. 定義一個getEelment的方法

public static WebElement getWebElement(String locator) {

WebElement we;

                    we = driver.findElement(locator(locator));

return we;

            }

這樣找元素的方法就簡單的完成了,但是這么做有什么好處呢?

a) 不用過分關(guān)心底層找元素的方法,我只要提供對元素的屬性就可以了,可以是id,name....

b) 重用了findElement方法,不用寫很多次,只定義一次,無限次調(diào)用

c) 維護(hù)更容易,不用頻繁的該代碼,出錯了只要改很少的地方,實現(xiàn)了屬性和方法的分離

d)可擴(kuò)展性更強

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI