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秒

扩展阅读

posted @ 2018-10-07 18:19  深圳-逸遥  阅读(4746)  评论(0编辑  收藏  举报