Python Selenium專案實戰(一)—— 怎麼去驗證一個按鈕是啟用的(可點選)?
阿新 • • 發佈:2018-12-14
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
執行結果
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秒