Node.js結(jié)合selenium做web自動(dòng)化測(cè)試第四課

親愛的小伙伴們,Node.js結(jié)合selenium做web自動(dòng)化測(cè)試第四課的內(nèi)容整理來了,今天介紹的是元素定位的八種方法

首先為大家介紹的就是定位元素的寫法,這個(gè)大家應(yīng)該并不陌生,上一節(jié)課的程序里有用到,不知道細(xì)心的同學(xué)有沒有發(fā)現(xiàn)這里有兩種寫法

兩種寫法效果一樣,至于你想御用哪一個(gè),還是那句話,自己開心就好,我們的重點(diǎn)是,怎么來定位元素,下面,有請(qǐng)八個(gè)佳麗出場(chǎng)。

官網(wǎng)上有他們的花名冊(cè)?

https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/index_exports_By.html

為了便于讓大家看懂,下面的介紹呢我改一下出場(chǎng)順序

1.By.id

一般情況下,Id都是唯一的,所以如果你在檢查元素的時(shí)候可以找到它的id值,那就甭猶豫了,拿來用吧!怎么用呢?沒圖你說個(gè)屁,嗯,舉個(gè)栗子:

我們先用一段程序在瀏覽器里面打開百度網(wǎng)址

這里我們點(diǎn)擊編輯器然后鼠標(biāo)定位到輸入框,可以看到藍(lán)色部分就是定位到的元素

框中有個(gè)顯眼的id="kw"是嗎,嗯,要的就是kw,這就是我們要找的id屬性,所以接下來這樣寫

如我們所愿,它定位到了輸入框,并且按照要求,在里面輸入了“123”

id屬性了解了之后,name和className的道理是一樣的

還是剛才那段藍(lán)色的框里的內(nèi)容,注意到id后面的name和class了嗎,這兩個(gè)就是name屬性和className屬性

所以同樣的功能用這兩個(gè)寫起來是下面這樣:

2.By.name

3.?By.className

這里大家注意:class屬性要保證值是唯一的,檢查是不是唯一的方法很簡單,把屬性值copy下來,檢查頁面ctrl+f,下面會(huì)出現(xiàn)一個(gè)搜索框,搜索框里把值貼進(jìn)去

這里會(huì)顯示值有多少個(gè)

就算這里查到的個(gè)數(shù)不是唯一的也不用擔(dān)心,因?yàn)橛行┲悼赡苁窃赾cs或者javascript里面,我們只要關(guān)心body里的值是不是唯一就可以了,比如我們剛剛這個(gè),雖然總數(shù)不只一個(gè),但是body里面是唯一的,所以放心的用就好了

4.?By.xpath

這一個(gè)在上節(jié)課介紹過的,準(zhǔn)確率較高的一種定位方式,用起來很簡單,復(fù)制粘貼走一波就可以了,細(xì)節(jié)不演示了,大家自己動(dòng)手,豐衣足食吧

5.?By.css

By.css呢,跟xpath用法一樣,都是可以直接復(fù)制粘貼的,還是剛那個(gè)路徑,只不過要復(fù)制的地方稍稍往上一點(diǎn)

但是呢,css肯定不光這一個(gè)復(fù)制粘貼的辦法,送你套秘籍,點(diǎn)這里http://www.w3school.com.cn/cssref/css_selectors.asp

這個(gè)選擇器什么意思呢,舉兩個(gè)例子啊,上面知道了id屬性和class屬性了吧,我們用css定位的時(shí)候填寫class屬性,只需要在值的簽名加一個(gè). ?同樣,如果你用id屬性,那么就在值的前面加#

比如說,我們剛剛搜索框的Id屬性值是kw,那么這樣寫

或者這樣

試一下結(jié)果,效果是一樣的吧,驚不驚喜,意不意外,下面的那些大家以后的實(shí)踐當(dāng)中可以挨個(gè)玩玩

6.?By.linkText

這個(gè)方法,主要用來點(diǎn)擊頁面上會(huì)跳轉(zhuǎn)的鏈接,還是看百度首頁

右上角這一排,點(diǎn)擊任一一個(gè)都會(huì)跳轉(zhuǎn)到一個(gè)新頁面的鏈接,用By.linkText就準(zhǔn)沒錯(cuò)了,不用找屬性,直接輸入字段名稱就可以,但是記得它是頁面唯一一的字段才可以,如果這個(gè)字段在頁面出現(xiàn)兩個(gè)或以上,那乖乖的用別的方法去,沒商量

下面點(diǎn)個(gè)“新聞”鏈接看看

7. By.partialLinkText

這個(gè)用法跟上面的一樣,定位頁面的鏈接,區(qū)別在于,它支持模糊查詢,也就是說,輸入要點(diǎn)擊文字的一部分就可以了,我們要搜索“新聞”,在這里了,主要輸入“新”或者“聞”都可以

效果一樣的,不騙你

8.?By.tagName

我們可以看到官網(wǎng)上在這種方法前面標(biāo)注了deprecated,沒錯(cuò),它是一種被打入冷宮的方法,已經(jīng)被棄用了,為什么這樣對(duì)它呢?

原因這種方法呢要根據(jù)元素前面的標(biāo)簽來定位比如說div標(biāo)簽,a標(biāo)簽巴拉巴拉的一對(duì)標(biāo)簽,可是這樣的標(biāo)簽有太多,找起來相當(dāng)麻煩,所以呢,大家只要對(duì)它有個(gè)大致了解就好,實(shí)際運(yùn)用中不用此方法定位元素

定位元素的幾種方法上面介紹完了,下面說一下動(dòng)態(tài)生成的元素怎么定位

何為動(dòng)態(tài)生成的元素,比如這樣,我們?cè)谳斎肟蚶镙斎?23,這個(gè)時(shí)候下面會(huì)帶出來好幾個(gè)可能我們要找的選項(xiàng)

如果此時(shí)我們想要選擇第二條“12306鐵路客戶服務(wù)中心”,你會(huì)發(fā)現(xiàn)當(dāng)點(diǎn)擊選擇器的時(shí)候鼠標(biāo)失去焦點(diǎn),下面的信息就全都消失不見了,扎心了,老鐵。。。

沒關(guān)系,只要思想不滑坡,辦法總比困難多

先記錄輸入框的Id屬性值

然后在console界面下找到輸入框,在里面輸入搜索內(nèi)容,這時(shí)就會(huì)自動(dòng)輸入搜索內(nèi)容帶出下面的結(jié)果選項(xiàng)

再切換到Element目錄下,就可以定位到了

元素定位說到這里,第四課的另外一個(gè)內(nèi)容,是如何截屏,老套路,還是先看官方文檔怎么說https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/chrome_exports_Driver.html#takeScreenshot

調(diào)用的方法是takeScreenshot,我們代碼實(shí)現(xiàn)一下

截屏數(shù)據(jù)存儲(chǔ)在變量Imagedata里面,打印出來
輸出結(jié)果里面的這一堆天書就是圖片的源代碼

怎么把這一堆天書存儲(chǔ)成可以看到的圖片呢,這里用這個(gè)方法fs ? ?https://nodejs.org/api/fs.html

首先我們要require進(jìn)來這個(gè)方法

然后把圖片的源碼轉(zhuǎn)換成圖片格式,參考這個(gè)文檔

https://stackoverflow.com/questions/3422262/take-a-screenshot-with-selenium-webdriver

照他說的,差不多就是這么寫了

writeFile后面的第一個(gè)代表存儲(chǔ)路徑,screen.png是我們給他定義的文件名,imagedata我們剛剛給截圖源文件的名字,base64是圖片的編碼格式,就是我們看不懂的天書

行不行,拉出來遛遛唄

看,多了一個(gè).png

打開看一下,就是我們要的截圖

今天的課堂筆記到這里結(jié)束,更多精彩內(nèi)容,歡迎關(guān)注騰訊課堂

https://ke.qq.com/course/281565#tuin=173f40be,周一至周五晚上8:00,不見不散

測(cè)試工具CukeTest下載地址http://www.cuketest.com/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容