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. 验证 验证码发送按钮,点击后,按钮置灰不可点击
  3. 步骤
  4. 1、打开 饿了么 的注册页面
  5. 2、输入 11 大陆手机号
  6. 3、点击 【获取验证码】
  7. 预期结果:
  8. 3、【获取验证码】按钮置灰,不可点击, 友好提示语:已发送

代码实现

  1. from selenium import webdriver
  2. from time import sleep
  3. dr = webdriver.Chrome()
  4. dr.implicitly_wait(10)
  5. # 导航到 饿了么 注册页面
  6. dr.get('https://h5.ele.me/login/#redirect=https%3A%2F%2Fwww.ele.me%2Fhome%2F')
  7. # 定位并输入手机号
  8. dr.find_element_by_css_selector('[type = "tel"]').send_keys('输入你的11位大陆手机号码‘)
  9. # 点击【获取验证码】按钮
  10. dr.find_element_by_css_selector('.CountButton-3e-kd').click()
  11. # 打印 定位【获取验证码】按钮 ,is_enabled()返回结果
  12. print('is_enabled()返回结果:', dr.find_element_by_css_selector('.CountButton-3e-kd').is_enabled())
  13. # 验证【获取验证码】按钮不可点击
  14. assert dr.find_element_by_css_selector('.CountButton-3e-kd').is_enabled() == False
  15. sleep(2)
  16. # 获取 “验证码发送成功” 文本信息
  17. actual_result = dr.find_element_by_css_selector('.CountButton-3e-kd').text
  18. print('actual_result:', actual_result)
  19. # 验证 【获取验证码】 文本信息 变更 【已发送】
  20. assert '已发送' in actual_result

运行结果

  1. is_enabled()返回结果: False
  2. actual_result: 已发送(29s)

用Unittest + POM的设计思想,进行简单的封装。

  1. from selenium import webdriver
  2. from time import sleep
  3. import unittest
  4. class SendMsgCase(unittest.TestCase):
  5. def setUp(self):
  6. self.dr = webdriver.Chrome()
  7. self.dr.get('https://h5.ele.me/login/#redirect=https%3A%2F%2Fwww.ele.me%2Fhome%2F')
  8. self.dr.implicitly_wait(10)
  9. # 封装CSS定位方法
  10. def by_css(self, css):
  11. return self.dr.find_element_by_css_selector(css)
  12. # 手机号码输入框定位
  13. def mobile_phone_input_box(self):
  14. return self.by_css('[type = "tel"]')
  15. # 【免费获取验证码】按钮定位
  16. def send_msg_button(self):
  17. return self.by_css('.CountButton-3e-kd')
  18. # 获取 发送验证码成功 文本信息
  19. def send_msg_successful_text(self):
  20. return self.by_css('#registerContainer > div > div.codeSendHint').text
  21. # 发送验证码
  22. def send_msg(self, mobile_phone):
  23. self.mobile_phone_input_box().send_keys(mobile_phone)
  24. self.send_msg_button().click()
  25. # 测试用例
  26. def test_send_msg_button(self):
  27. # 发送验证码
  28. self.send_msg('输入你的11位大陆手机号码')
  29. sleep(2)
  30. # 验证【免费获取验证码】按钮 被禁用
  31. self.assertFalse(self.send_msg_button().is_enabled())
  32. # 期望结果
  33. expected_result = '已发送'
  34. # 预期结果
  35. actual_result = self.send_msg_button().text
  36. # 验证 实际结果包含预期结果 “已经发送”
  37. self.assertTrue(expected_result in actual_result)
  38. def tearDown(self):
  39. self.dr.quit()
  40. if __name__ == '__main__':
  41. unittest.main()

动手时间

  • 把上面的代码运行一遍,自己动手敲一遍试试
  • 尝试在上面的代码里面,增加一个用例————验证码发送的间隔时长30秒

扩展阅读

学霸笔记系列 - Python Selenium项目实战(一)—— 怎么去验证一个按钮是启用的(可点击)?的更多相关文章

  1. Python+Flask+Gunicorn 项目实战(一) 从零开始,写一个Markdown解析器 —— 初体验

    (一)前言 在开始学习之前,你需要确保你对Python, JavaScript, HTML, Markdown语法有非常基础的了解.项目的源码你可以在 https://github.com/zhu-y ...

  2. QT5 QSS QML界面美化视频课程系列 QT原理 项目实战 C++1X STL

    QT5 QSS QML界面美化视频课程系列 QT原理 项目实战 C++1X STL 课程1   C语言程序设计高级实用速成课程 基础+进阶+自学 课程2   C语言程序设计Windows GDI图形绘 ...

  3. Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架

    Asp.Net Core 2.0 项目实战(1) NCMVC开源下载了 Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架 Asp.Ne ...

  4. Python+Selenium中级篇之8-Python自定义封装一个简单的Log类《转载》

    Python+Selenium中级篇之8-Python自定义封装一个简单的Log类: https://blog.csdn.net/u011541946/article/details/70198676

  5. 《一头扎进》系列之Python+Selenium框架实战篇7 - 年底升职加薪,年终奖全靠它!Merry Christmas

    1. 简介 截止到上一篇文章为止,框架基本完全搭建完成.那么今天我们要做什么呢????聪明如你的小伙伴或者是童鞋一定已经猜到了,都测试完了,当然是要生成一份高端大气上档次的测试报告了.没错的,今天宏哥 ...

  6. python+selenium 自动化测试实战

    一.前言: 之前的文章说过, 要写一篇自动化实战的文章, 这段时间比较忙再加回家过11一直没有更新博客,今天整理一下实战项目的代码共大家学习.(注:项目是针对我们公司内部系统的测试,只能内部网络访问, ...

  7. Python Django CMDB项目实战之-1如何开启一个Django-并设置base页、index页、文章页面

    1.环境 win10 python 2.7.14 django 1.8.2 需要用到的依赖包:MySQLdb(数据库的接口包).PIL/pillow(处理图片的包) 安装命令: pip install ...

  8. centos7.4 64位安装 google-chrome 与 chromedriver 运行 Python selenium 项目

    centos7.4 实例 利用 yum 命令安装 google-chrome 超级简单(安装最新版): yum install https://dl.google.com/linux/direct/g ...

  9. 第一章 python+selenium自动化测试实战

    @序章 自动化测试是软件测试的主流方向之一: 教程从测试的根本需求出发,讲解如何开展自动化测试. 首先,我们要明白,自动化仅仅是满足我们某种需求的一种工具:没有必要花费时间把它全部弄懂:我们只需要学会 ...

随机推荐

  1. [BZOJ2780][SPOJ8093]Sevenk Love Oimaster

    bzoj luogu 题面 给定n个模板串,以及m个查询串. 依次查询每一个查询串是多少个模板串的子串. sol 广义后缀自动机裸题? 先建出\(SAM\),然后记录一下每个节点分别在多少个模板串里出 ...

  2. ACM学习历程—HDU 5459 Jesus Is Here(递推)(2015沈阳网赛1010题)

    Sample Input 9 5 6 7 8 113 1205 199312 199401 201314 Sample Output Case #1: 5 Case #2: 16 Case #3: 8 ...

  3. Oracle 12c 新特性之 PDB 级别闪回数据库

    在Oracle Database 12.1中,闪回数据库操作仅限于 CDB ,Oracle Database 12.2支持 CDB 与 PDB 数据库的闪回. PDB 的还原点种类:1. normal ...

  4. mongodb数据迁移的两种方式

    环境说明:bbs数据采集的数据越来越多,目前是50G,每天大概以200W的数据量增长.而当前服务器1.2上面的空间不足,需要把数据迁移到空间足够大的1.3上面去 尝试了2种方式对数据进行迁移,一种是r ...

  5. python构造一个http请求

    我们经常会用python来进行抓包,模拟登陆等等, 势必要构造http请求包. http的request通常有4个方法get,post,put,delete,分别对应于查询,更新,添加,删除.我们经常 ...

  6. requests 的使用

    1.1.实例引入 # 引入Requests库 import requests   # 发起GET请求 response = requests.get('https://www.baidu.com/') ...

  7. eclipse如何集成tomcat插件

    刚在Eclipse官方网站下载的Eclipse,需要自己手动安装tomcat插件才能配置tomcat服务器.网上好多安装方法,这里我就不厌其烦的再写一遍,边安装边截图讲解下安装方法. 首先你要去下载E ...

  8. 接口Comparator和Comparable的区别和联系

    1. Comparator 和 Comparable 相同的地方 他们都是java的一个接口, 并且是用来对自定义的class比较大小的. 什么是自定义class: 如 public class Pe ...

  9. 用户收到"无法显示页面"的错误消息和"Connections_refused"条目记录在运行 Windows Server 2003,Exchange 2003 和 IIS 6.0 的服务器上的 Httperr.log 文件

    症状 您会遇到下列症状在运行 Microsoft Windows Server 2003. Microsoft Exchange Server 2003年和 Microsoft Internet In ...

  10. GIF助手激活教程(购买+激活)图文版

    GIF助手首页==>设置(右上角) ==>输入激活码会弹出购买或者激活的对话框.(如果不明白操作,可以点击如何购买激活码先查看购买帮助指南再进行购买) 点击复制设备码并购买. 此时会进入到 ...