Selenium測試form表單之下拉選單

jongjongjong發表於2024-10-27

處理form表單中的下拉選單,需要用到一個Selenium工具類-Select

一、Select工具類常用屬性和方法

方法/屬性 描述
1 select_by_value() 根據值選擇
2 select_by_index() 根據索引選擇
3 select_by_visible_text() 根據文字選擇
4 deselect_by_value 根據值反選
5 deselect_by_index() 根據索引反選
6 deselect_by_visible_text() 根據文字反選
7 deselect_all() 反選所有
8 options 所有選項
9 all_selected_options 所有選中選項
10 frist_selected_option 第一個選擇選項

二、form表單測試

1、下拉選單選項為單選時,定義from表單

(1)form表單程式碼

<select name="provise" id="provise"></select>

如下圖所示,form表單中定義了一個單選城市的下拉選單

image


(2)測試用例
用例:選中不同選項
結果:可正常選中,各個選項互斥
image


自動執行測試用例程式碼:
利用Select類中三個不同方法實現:select_by_value(); select_by_index(); select_by_visible_text()

select.select_by_index(1)#根據索引值選中選項,index:0,1,2···
sleep(2)
select.select_by_value('bj')#根據值選中選項
sleep(2)
select.select_by_visible_text('TianJing')#根據視覺化文字選中物件
sleep(2)

2、下拉選單選項為多選時,需多定義一個屬性multiple

(1)form表單程式碼

<select name="provise" id="provise" multiple></select>

如下圖所示,定義了一個可多選城市的form表單
image


(2)測試用例1
用例1:選中多個選項
結果1:可正常選中,各個選項不互斥
image


自動化執行測試用例程式碼:
透過索引遍歷選項,逐個選中,用到的Select類方法是select_by_index():透過索引選中

#多選的情況下將選項全選
for i in range(3):
    select.select_by_index(i)
    sleep(1)
sleep(2)

也可以利用的是Select類中options屬性,遍歷options列表逐個點選

for option in select.options:
    option.click()#點選選項
    sleep(2)
sleep(2)

(3)測試用例2
用例2:反選所有選項
結果2:所有選項取消選中狀態
image


自動化執行用例程式碼:
用到Select類中的deselect_all()方法

#反選全部
select.deselect_all()
sleep(2)

三、總程式碼

1、form表單定義
點選檢視程式碼
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/html" xmlns="http://www.w3.org/1999/html">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<form action="javascript:alert('test')" >
    provide:
    <select name="provise" id="provise" multiple>
        <option value="bj">BeiJing</option>
        <option value="sh">ShangHai</option>
        <option value="tj">TianJing</option>
    </select>
</form>
</body>
</html>
2、form表單測試
點選檢視程式碼
from selenium import webdriver
from time import sleep
import os
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select

class Testcase(object):#繼承object類
    def __init__(self):
        self.driver=webdriver.Edge()
        path=os.path.dirname(os.path.abspath(__file__))
        file_path ='file:///' + path + '/form2.html'
        self.driver.get(file_path)#載入form表單

    def test_select(self):
        se=self.driver.find_element(By.ID,"provise")#定位元素
        select=Select(se)#例項化Select物件,引數為WebElement物件

        # select.select_by_index(1)#根據索引值選中選項,index:0,1,2···
        # sleep(2)
        # select.select_by_value('bj')#根據值選中選項
        # sleep(2)
        # select.select_by_visible_text('TianJing')#根據視覺化文字選中物件
        # sleep(2)

        # #多選的情況下將選項全選
        # for i in range(3):
        #     select.select_by_index(i)
        #     sleep(1)
        # sleep(2)
        #
        # #反選全部
        # select.deselect_all()
        # sleep(2)

        for option in select.options:
            option.click()#點選選項
            sleep(2)
        sleep(2)

        self.driver.quit()

if __name__=="__main__":
    case=Testcase()
    case.test_select()

相關文章