学霸笔记系列 - 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
运行结果

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秒
扩展阅读
学霸笔记系列 - Python Selenium项目实战(一)—— 怎么去验证一个按钮是启用的(可点击)?的更多相关文章
- Python+Flask+Gunicorn 项目实战(一) 从零开始,写一个Markdown解析器 —— 初体验
(一)前言 在开始学习之前,你需要确保你对Python, JavaScript, HTML, Markdown语法有非常基础的了解.项目的源码你可以在 https://github.com/zhu-y ...
- QT5 QSS QML界面美化视频课程系列 QT原理 项目实战 C++1X STL
QT5 QSS QML界面美化视频课程系列 QT原理 项目实战 C++1X STL 课程1 C语言程序设计高级实用速成课程 基础+进阶+自学 课程2 C语言程序设计Windows GDI图形绘 ...
- 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 ...
- Python+Selenium中级篇之8-Python自定义封装一个简单的Log类《转载》
Python+Selenium中级篇之8-Python自定义封装一个简单的Log类: https://blog.csdn.net/u011541946/article/details/70198676
- 《一头扎进》系列之Python+Selenium框架实战篇7 - 年底升职加薪,年终奖全靠它!Merry Christmas
1. 简介 截止到上一篇文章为止,框架基本完全搭建完成.那么今天我们要做什么呢????聪明如你的小伙伴或者是童鞋一定已经猜到了,都测试完了,当然是要生成一份高端大气上档次的测试报告了.没错的,今天宏哥 ...
- python+selenium 自动化测试实战
一.前言: 之前的文章说过, 要写一篇自动化实战的文章, 这段时间比较忙再加回家过11一直没有更新博客,今天整理一下实战项目的代码共大家学习.(注:项目是针对我们公司内部系统的测试,只能内部网络访问, ...
- Python Django CMDB项目实战之-1如何开启一个Django-并设置base页、index页、文章页面
1.环境 win10 python 2.7.14 django 1.8.2 需要用到的依赖包:MySQLdb(数据库的接口包).PIL/pillow(处理图片的包) 安装命令: pip install ...
- centos7.4 64位安装 google-chrome 与 chromedriver 运行 Python selenium 项目
centos7.4 实例 利用 yum 命令安装 google-chrome 超级简单(安装最新版): yum install https://dl.google.com/linux/direct/g ...
- 第一章 python+selenium自动化测试实战
@序章 自动化测试是软件测试的主流方向之一: 教程从测试的根本需求出发,讲解如何开展自动化测试. 首先,我们要明白,自动化仅仅是满足我们某种需求的一种工具:没有必要花费时间把它全部弄懂:我们只需要学会 ...
随机推荐
- ACM学习历程—HDU 3949 XOR(xor高斯消元)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3949 题目大意是给n个数,然后随便取几个数求xor和,求第k小的.(重复不计算) 首先想把所有xor的 ...
- 命令行启动nodejs方式 小总结
之前启动nodejs都是写一个命令行文件,如nodejs.cmd,内容为:start node E:\node\app.js. 今天突然想到之前也用过另外一种方式启动,就是在命令行通过cd命令先找到n ...
- Poj 2247 Humble Numbers(求只能被2,3,5, 7 整除的数)
一.题目大意 本题要求写出前5482个仅能被2,3,5, 7 整除的数. 二.题解 这道题从本质上和Poj 1338 Ugly Numbers(数学推导)是一样的原理,只需要在原来的基础上加上7的运算 ...
- Poj 2136 Vertical Histogram(打印垂直直方图)
一.Description Write a program to read four lines of upper case (i.e., all CAPITAL LETTERS) text inpu ...
- CentOS6和CentOS7服务开机启动
CentOS 6和CentOS 7都可以定义开机启动哪些服务,但CentOS 6的命令是chkconfig,CentOS 7是systemctl. 本文将介绍两种命令的实现方式. 一.CentOS 6 ...
- 【转】Pro Android学习笔记(十三):用户界面和控制(1):UI开发
目录(?)[-] UI开发 方式一通过XML文件 方式二通过代码 方式三XML代码 UI开发 先理清一些UI概念: view.widget.control:这三个名词其实没有什么区别,都是一个UI元素 ...
- BluetoothFindRadioClose 函数
BOOL BluetoothFindRadioClose( HBLUETOOTH_RADIO_FIND hFind );关闭与查找蓝牙无线电相关的枚举句柄.参数: hFind Enumeration ...
- [xdoj1029]求解某个数的最高位和最低位
解题关键: 1.最高位求法 long long int x=n^m; 式子两边同时取lg lg(x)=m*lg(n): x=10^(m*lg(n)): 10的整数次方的最高位一定是1,所以x的最高位取 ...
- Flask08 包含(include)、继承(extends)、宏???、模板中变量的来源、利用bootstrap构建自己的网页结构
1 包含 直接把另一个文件的内容,复制粘贴过来 {% include "模板路径" %} 注意:模板都是放在 templates 这个文件夹下面的,可以在里面新建文件夹来进行分离: ...
- HDU 3966 Aragorn's Story (简单树链剖分)
题意:给一棵树,并给定各个点权的值,然后有3种操作: I C1 C2 K: 把C1与C2的路径上的所有点权值加上K D C1 C2 K:把C1与C2的路径上的所有点权值减去K Q C:查询节点编号为C ...