Selenium自動化測試學習之WebDriver API之定位一組元素

定位一組元素

前面文章中介紹過8中定位方法,這8中定位方法針對單個元素定位的,WebDriver還提供了與之對應的8中用於定位一組元素的方法。

程式碼如下:

Selenium自動化測試學習之WebDriver API之定位一組元素

定位一組元素的方法與定位單個元素的方法類似,唯一的區別是在單詞element後面多了一個s表示複數。定位一組元素一般用於以下場景:

* 批次操作元素,例如勾選頁面上所有的複選框。

* 先獲取一組元素,再從這組物件中過濾出需要操作的元素。例如定位出頁面上所有的CheckBox,然後選擇其中的一個進行操作。

程式碼如下:

Selenium自動化測試學習之WebDriver API之定位一組元素

這裡我自己使用HTML寫了一個CheckBox複選框,關於HTML這裡就不多介紹了。

結果如下:

Selenium自動化測試學習之WebDriver API之定位一組元素

前面提到,透過tag name的定位方式很難定位到單個元素,因為元素標籤名重名的機率很高,因而在定位一組元素時,這種方式就派上用場了。在上面的例子中先透過find_elements_by_tag_name()找到一組標籤名為input的元素。然後透過for迴圈進行遍歷,在遍歷過程中,透過get_attribute()方法獲取元素的type屬性是否為CheckBox,如果為CheckBox,就認為這個元素是一個複選框,對其進行勾選操作。

需要注意的是,在上面的例子中,透過瀏覽器開啟的是一個本地的html檔案,所以需要get本地檔案的絕對路徑。

除此之外,我們還可以使用XPath或CSS來直接判斷屬性值,從而進行單擊操作

程式碼如下:

Selenium自動化測試學習之WebDriver API之定位一組元素

結果如下:

Selenium自動化測試學習之WebDriver API之定位一組元素

透過XPath或CSS來查詢一組元素時,省去了判斷的步驟。因為定位方法已經做了判斷,只需要迴圈對這一組元素進行勾選即可。

除此之外,例子中還用到了python所提供的兩個有趣的方法。Len()方法可以用來計算元素的個數,pop()方法用於獲取列表中的一個元素(預設最後一個元素),並且返回該元素的值。因為前面的迴圈已經將所有的複選框都勾選上了,再對這一組元素執行pop()。click(),其實是對最後一個元素取消勾選。

如果只想勾選一組元素中的某一個該如何操作呢?

pop()或pop(-1) 預設獲取一組元素中的最後一個。

pop(0) 預設獲取一組元素中的第一個。

pop(1) 預設獲取一組元素中的第二個。

……

這樣就可以操作這一組元素中的任意一個元素了,只需要數一數需要操作的元素是這一組中的第幾個。