Python:Selenium 2:使用
创建一个浏览器对象
from selenium import webdriver
browser = webdriver.Chrome()
WebDriver在将控制权返回给测试脚本之前,会一直等待到页面完全加载完毕,但如果页面使用了很多AJAX,WebDriver可能无法准确判断页面是否完全加载。
打开页面
browser.get("https://www.baidu.com")
不能省略http:// 或 https://
获取页面源码
html = browser.page_source
定位HTML元素
|
定位一个元素 |
含义 |
|
find_element_by_tag_name |
通过标签定位 |
|
find_element_by_id |
通过元素id定位 |
|
find_element_by_name |
通过元素name定位 |
|
find_element_by_class_name |
通过类名进行定位 |
|
find_element_by_css_selector |
通过css选择器进行定位 |
|
find_element_by_xpath |
通过xpath表达式定位(xpath和xml中的类似) |
|
find_element_by_link_text |
通过完整超链接文本定位(不是通过超链接的地址,而是超链接上面的文字描述) |
|
find_element_by_partial_link_text |
通过部分链接定位 |
如果没有发现任何元素,将会抛出NoSuchElementException异常。
以上的方法仅返回第一个满足条件的元素,如果要返回多个元素,需要使用find_elements_by_xx。
输入文本
element.send_keys("selenium")
你输入的字符将会被添加在已有文本之后。如果传入多个文本,将依次添加。
在输入框中输入的字符不会自动清空,你可以使用clear方法输入区域的内容。
element.Clear()
快捷键
from selenium.webdriver.common.keys import Keys
element.send_keys(Keys.BACKSPACE) # 删除键
element.send_keys(keys.ENTER) # 回车键
element.send_keys(Keys.SPACE) # 空格键
element.send_keys(Keys.CONTROL, 'a') # Ctrl+A
element.send_keys(Keys.CONTROL, 'c') # Ctrl+C
点击按钮
element.click()
定位下拉框(select)
方法一:先定位select,再定位option选项。
browser.find_element_by_id("sel").find_element_by_xpath("//option[@value='晴']").click()
方法二:直接xpath定位。
browser.find_element_by_xpath("//*[@id='sel']/option[3]").click()
方法三:select模块定位
from selenium.webdriver.support.select import Select
element = browser.find_element_by_id("sel")
Select(element).select_by_index(2).click() # index 从0开始
Select(element).select_by_value('晴')
Select(element).select_by_visible_text('雨')
用Select定位后会直接选中不需要click()方法选中,也没有click()方法。
Select中的其他方法如下:
deselect_all() # 取消所有选项
deselect_by_index() # 取消对应 index 选项
deselect_by_value() # 取消对应 value 选项
deselect_by_visible_text() # 取消对应文本选项
以上方法需要select支持多选(multiple="true")
单选框(radio)复选框(checkbox)
element = browser.find_element_by_id('yes')
element.click()
就是定位HTML元素,没啥花样。
判断是否选中
browser.find_element_by_id('yes').is_selected()
判断是否可见
有些元素设置了display:none,这时候如果直接操作这种隐藏的元素,会报错:element not visible。
element.is_displayed()
定位弹框
1、alert弹框
alertElement = browser.switch_to_alert()
print(alertElement.text) # 获取对话框文本值
alertElement.accept() # 点击确认按钮
在现在的版本中,browser.switch_to_alert()已经过时了,
改成:alertElement = browser.switch_to.alert
2、confirm弹框
confirm 和 alert 是一样的,只是多了个点击取消按钮的方法。
confirmElement = browser.switch_to.alert
print(confirmElement.text) # 获取对话框文本值
confirmElement.dismiss() # 点击取消按钮
3、prompt弹框
prompt 又多了个输入框,send_keys 方法即可。
执行JS
js = "$('#sp').toggle();"
browser.execute_script(js)
退出
browser.quit()
示例:
为了测试,我们新建一个htnl网页
<html>
<head>
<title>SeleniumTest</title>
<script src="Scripts/jquery-1.10.2.min.js" type="text/javascript"></script> <style type="text/css">
tr{
height: 40px}
</style>
</head>
<body>
<table style="margin: 200px auto;">
<tr>
<td><input type="text" /></td>
</tr>
<tr>
<td><input type="text" id="txt1" /></td>
</tr>
<tr>
<td><input type="text" id="txt2" name="txt2" /></td>
</tr>
<tr>
<td><input type="text" class="c1" /></td>
</tr>
<tr>
<td><input type="text" class="c2" /></td>
</tr>
<tr>
<td><input type="text" id="txt6" /></td>
</tr>
<tr>
<td><span id="sp" style="display:none">隐藏的标签</span></td>
</tr>
<tr>
<td>
<a href="javascript:;">aaa</a>
<a href="https://www.baidu.com" target="_blank">bbb</a>
<a href="https://baike.baidu.com/" target="_blank">ccc</a>
</td>
</tr>
<tr>
<td>
<select id="sel">
<option value="无"></option>
<option value="晴">晴</option>
<option value="阴">阴</option>
<option value="雨">雨</option>
<option value="多云">多云</option>
</select>
</td>
</tr>
<tr>
<td>
<input type="radio" id="yes" />是
<input type="radio" id="no" />否
</td>
</tr>
<tr>
<td>
<input type="checkbox" id="chk1" name="chk" />语文
<input type="checkbox" id="chk2" name="chk" />数学
<input type="checkbox" id="chk3" name="chk" />英语
</td>
</tr>
<tr>
<td>
<input type="button" id="btn1" value="警告消息框" onclick="alert('警告警告')" />
<input type="button" id="btn2" value="确认消息框" onclick="confirm('是否确认')" />
<input type="button" id="btn3" value="提示消息框" onclick="prompt('提示注意')" />
<input type="button" id="btn4" value="显示" onclick="$('#sp').toggle();" />
</td>
</tr>
</table>
</body>
</html>
Python代码:
from selenium import webdriver
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.keys import Keys
import time browser = webdriver.Chrome() # 创建浏览器对象 browser.get("http://localhost:8001/") # 打开网址
time.sleep(2) # 定位html元素
txt1 = browser.find_element_by_tag_name('input')
txt1.send_keys('tag_name=input') # 输入文本 txt2 = browser.find_element_by_id('txt1')
txt2.send_keys('id=txt1') txt3 = browser.find_element_by_name('txt2')
txt3.send_keys('name=txt2') txt4 = browser.find_element_by_class_name('c1')
txt4.send_keys('class_name=c1') txt5 = browser.find_element_by_css_selector('.c2')
txt5.send_keys('css=.c2') txt6 = browser.find_element_by_xpath("//input[@id='txt6']")
txt6.send_keys("xpath=//input[@id='txt6']") a1 = browser.find_element_by_link_text('bbb')
# a1.click() txt1.clear() # 清空文本
time.sleep(2) # 快捷键
txt2.send_keys(Keys.CONTROL, 'a')
time.sleep(1)
txt2.send_keys(Keys.CONTROL, 'c')
time.sleep(1)
txt2.send_keys(Keys.BACKSPACE)
time.sleep(1)
txt2.send_keys(Keys.CONTROL, 'v')
time.sleep(2) # 定位下拉框
browser.find_element_by_id("sel")\
.find_element_by_xpath("//option[@value='晴']").click()
time.sleep(1)
browser.find_element_by_xpath("//*[@id='sel']/option[3]").click() # 用Select模块定位
element = browser.find_element_by_id("sel")
Select(element).select_by_index(2) # index 从0开始
time.sleep(1)
Select(element).select_by_value('晴')
time.sleep(1)
Select(element).select_by_visible_text('雨') # 单选框
element = browser.find_element_by_id('yes')
element.click()
print(element.is_selected()) # 复选框
browser.find_element_by_id('chk1').click() # 判断元素是否可见
print(browser.find_element_by_id('sp').is_displayed()) # alert弹框
browser.find_element_by_id('btn1').click()
alertElement = browser.switch_to.alert
print(alertElement.text) # 获取对话框文本值
alertElement.accept() # 点击确认按钮 # confirm弹框
browser.find_element_by_id('btn2').click()
confirmElement = browser.switch_to.alert
print(confirmElement.text) # 获取对话框文本值
confirmElement.dismiss() # 点击取消按钮 # 执行JS
js = "$('#sp').toggle();"
browser.execute_script(js) # 退出
browser.quit()
element.is_displayed()
Python:Selenium 2:使用的更多相关文章
- python+selenium 浏览器的问题
以前用selenium调用firefox是不需要驱动的,最近安装了python3.52+最新的firefox 发现调不起来了 搜索以后发现Firefox 47+需要搞个firefox的驱动 gecko ...
- 一次完整的自动化登录测试-基于python+selenium进行cnblog的自动化登录测试
Web登录测试是很常见的测试!手动测试大家再熟悉不过了,那如何进行自动化登录测试呢!本文作者就用python+selenium结合unittest单元测试框架来进行一次简单但比较完整的cnblog自动 ...
- Python + Selenium 实现登录Office 365
最近捡起之前用的Python + Selenium实现工作中需要的登录Office 365功能.(吐槽:国内网络真是卡,登录Office 365实属不易.另外Selenium这样的网站都要墙,无法理解 ...
- python+selenium+Robot
准备工作: 1.下载python2.7 http://python.org/getit/ 2.下载下载setuptools [python 的基础包工具] 可以帮助我们轻松的下载,构建,安装,升级,卸 ...
- python+selenium运行报错UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
使用python+selenium运行自动化脚本时,打印某一段文字出现UnicodeEncodeError: 'ascii' codec can't encode characters in posi ...
- Functional testing - python, selenium and django
Functional testing - python selenium django - Source Code : from selenium import webdriverfrom sele ...
- python selenium自动化(二)自动化注册流程
需求:使用python selenium来自动测试一个网站注册的流程. 假设这个网站的注册流程分为三步,需要提供比较多的信息: 在这个流程里面,需要用户填入信息.在下拉菜单中选择.选择单选的radio ...
- 使用python selenium进行自动化functional test
Why Automation Testing 现在似乎大家都一致认同一个项目应该有足够多的测试来保证功能的正常运作,而且这些此处的‘测试’特指自动化测试:并且大多数人会认为如果还有哪个项目依然采用人工 ...
- Python+Selenium WebDriver API:浏览器及元素的常用函数及变量整理总结
由于网页自动化要操作浏览器以及浏览器页面元素,这里笔者就将浏览器及页面元素常用的函数及变量整理总结一下,以供读者在编写网页自动化测试时查阅. from selenium import webdrive ...
- Python Selenium设计模式-POM
前言 本文就python selenium自动化测试实践中所需要的POM设计模式进行分享,以便大家在实践中对POM的特点.应用场景和核心思想有一定的理解和掌握. 为什么要用POM 基于python s ...
随机推荐
- 学习随笔:Vue.js与Django交互以及Ajax和axios
1. Vue.js地址 Staticfile CDN(国内): https://cdn.staticfile.org/vue/2.2.2/vue.min.js unpkg:会保持和npm发布的最新的版 ...
- 在python3中安装mysql扩展,No module named 'ConfigParser'
在python2.7中,我们安装的是 MySqldb或这 MySQL-python,能够正却安装,但在python3中,由于 其使用的扩展 ConfigParser 已经改名为 configpars ...
- Python操作Excel, 开发和调用接口,发送邮件
笔记: 上周回顾: 模块: 导入模块的顺序 lyl.py # def hhh(): pass name = 'lyl' a.py import lyl import sys from lyl impo ...
- 20181117-python第二章学习小结-part1
什么是二进制,十进制如何转化成二进制. 在python上可使用简单的函数进行转化,bin() 数据量的基本关系: 1bit 就是0/1的一个单位 1bytes = 8bit #1个字节,就是一 ...
- php 将图片转成base64
/** * 获取图片的Base64编码(不支持url) * @date 2017-02-20 19:41:22 * * @param $img_file 传入本地图片地址 * * @return st ...
- ubuntu/deepin 下 Sha 哈 dow 哈 socks 全局配置
1. 安装编译环境 Ubuntu在默认情况下没有提供C/C++的编译环境,因此需要手动安装.如果单独安装gcc以及g++比较麻烦,为了方便,我们直接安装Ubuntu提供的build-essential ...
- Mybatis中的Caused by: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): 找不到Mapper.xml文件的问题
1 首先在配置mapper-locations的时候: classpath: 只在现有目录下寻找配置文件 classpath*: 在现有的项目目录下和依赖的jar包下寻找xml配置文件
- Ubuntu出现卡logo、卡住、黑屏无法正常启动、屏幕和键盘背光无法调节等一系列问题?可能是NVIDIA显卡驱动没装好
也不知道是幸运还是不幸,我从一开始接触ubuntu就遇到这一系列的问题, 而且一直没有一个彻底解决的办法,搞得我无比头疼,也害得我重装了无数遍系统... 国际惯例,只按照个人习惯和喜好来写,对某些人来 ...
- JAVA---MYSQL 基本知识点 第二部分
增删改查 (CRUD): 数据库 , 表 , 记录 ; 约束 ; 主键约束 :primary key 如果是int类型 可以使用 自动增长型 auto_increment; 唯一约束 ...
- 严重: A child container failed during start
四月 20, 2019 4:54:28 下午 org.apache.coyote.AbstractProtocol init 信息: Initializing ProtocolHandler [&qu ...