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
運行結果
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秒