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('輸入你的11位大陸手機號碼‘)

# 點擊【獲取驗證碼】按鈕
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('輸入你的11位大陸手機號碼')
        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秒

擴展閱讀


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM