1. 程式人生 > >Python Selenium專案實戰(一)—— 怎麼去驗證一個按鈕是啟用的(可點選)?

Python Selenium專案實戰(一)—— 怎麼去驗證一個按鈕是啟用的(可點選)?

Q: 使用 Python Selenium WebDriver 怎麼去驗證一個按鈕是啟用的(可點選)?

A:Selenium WebDriver API 裡面給出瞭解決方法is_enabled()

使用WebDriver API —— driver.find_element_by_css_selector().is_enabled()

  • 如果按鈕可點選, 返回 True
  • 如果按鈕不可點選,返回 False

在UI 自動化中,測試登陸/註冊是最基本的能力,測試用例中常常會測試到一個點:

  • 驗證 驗證碼傳送按鈕,點選後,按鈕置灰不可點選

環境準備:

python 3.0以上 selenium 3.0以上 瀏覽器 Chrome 瀏覽器驅動 ChromeDriver

小編的環境:

python 3.6.4 selenium 3.13 瀏覽器 :Chrome 68 瀏覽器驅動: ChromeDriver 2.38

測試用例

目的 : 
         驗證 驗證碼傳送按鈕,點選後,按鈕置灰不可點選
步驟 :
        1、開啟 餓了麼 的註冊頁面
        2、輸入 11位 大陸手機號 
        3、點選 【獲取驗證碼】

        
預期結果:
        3、【獲取驗證碼】按鈕置灰,不可點選, 友好提示語:已傳送

程式碼實現

from selenium import webdriver
from time import sleep

dr = webdriver.Chrome()
dr.implicitly_wait(10)

# 導航到 餓了麼 註冊頁面
dr.get('https://h5.ele.me/login/#redirect=https%3A%2F%2Fwww.ele.me%2Fhome%2F')

# 定位並輸入手機號
dr.find_element_by_css_selector('[type = "tel"]').send_keys('13148850558')

# 點選【獲取驗證碼】按鈕
dr.find_element_by_css_selector('.CountButton-3e-kd').click()

# 列印 定位【獲取驗證碼】按鈕 ,is_enabled()返回結果
print('is_enabled()返回結果:', dr.find_element_by_css_selector('.CountButton-3e-kd').is_enabled())

# 驗證【獲取驗證碼】按鈕不可點選
assert dr.find_element_by_css_selector('.CountButton-3e-kd').is_enabled() == False
sleep(2)

# 獲取 “驗證碼傳送成功” 文字資訊
actual_result = dr.find_element_by_css_selector('.CountButton-3e-kd').text
print('actual_result:', actual_result)

# 驗證 【獲取驗證碼】 文字資訊 變更 【已傳送】
assert '已傳送' in actual_result

執行結果

image

is_enabled()返回結果: False
actual_result: 已傳送(29s)

用Unittest + POM的設計思想,進行簡單的封裝。

from selenium import webdriver
from time import sleep
import unittest


class SendMsgCase(unittest.TestCase):

    def setUp(self):
        self.dr = webdriver.Chrome()
        self.dr.get('https://h5.ele.me/login/#redirect=https%3A%2F%2Fwww.ele.me%2Fhome%2F')
        self.dr.implicitly_wait(10)

    #   封裝CSS定位方法
    def by_css(self, css):
        return self.dr.find_element_by_css_selector(css)

    #   手機號碼輸入框定位
    def mobile_phone_input_box(self):
        return self.by_css('[type = "tel"]')

    #  【免費獲取驗證碼】按鈕定位
    def send_msg_button(self):
        return self.by_css('.CountButton-3e-kd')

    #   獲取 傳送驗證碼成功 文字資訊
    def send_msg_successful_text(self):
        return self.by_css('#registerContainer > div > div.codeSendHint').text

    #   傳送驗證碼
    def send_msg(self, mobile_phone):
        self.mobile_phone_input_box().send_keys(mobile_phone)
        self.send_msg_button().click()

    #   測試用例
    def test_send_msg_button(self):
        # 傳送驗證碼
        self.send_msg('輸入你的電話號碼')
        sleep(2)

        #   驗證【免費獲取驗證碼】按鈕 被禁用
        self.assertFalse(self.send_msg_button().is_enabled())

        # 期望結果
        expected_result = '已傳送'

        # 預期結果
        actual_result = self.send_msg_button().text

        # 驗證 實際結果包含預期結果 “已經發送”
        self.assertTrue(expected_result in actual_result)

    def tearDown(self):
        self.dr.quit()


if __name__ == '__main__':
    unittest.main()

動手時間

  • 把上面的程式碼執行一遍,自己動手敲一遍試試
  • 嘗試在上面的程式碼裡面,增加一個用例————驗證碼傳送的間隔時長30秒

擴充套件閱讀