python3 操作页面上各种元素的方法
(1) 控制浏览器
①控制浏览器窗口大小set_window_size(宽,高)
打开浏览器全屏maximize_window()
②控制浏览器后退back()、前进forward()
③模拟浏览器刷新refresh()
(2) 简单元素操作
①清除文本clear()
②模拟按键输入send_keys(*value)
③单击元素click()
④提交表单submit()
⑤返回元素的尺寸size
⑥获取元素的文本text
⑦获得属性值get_attribute(“name”)
⑧设置该元素是否用户可见is_displayed()/true or false/
(3) 鼠标事件(ActionChains类提供了鼠标操作的常用方法)
①执行所有该类中存储的行为perform()
②右击context_click()
③双击double_click()
④拖动drag_and_drop(源元素,释放的目标元素)
⑤鼠标悬停move_to_element()
ActionChains(driver).move_to_element(a).perform()
(4) 键盘事件(Keys类)
①删除键(BackSpace)send_keys(Keys.BACK_SPACE)
②空格键(Space) send_keys(Keys.SPACE)
③制表键(Tab) send_keys(Keys.TAB)
④回退键(Esc) send_keys(Keys.ESCAPE)
⑤回车键(Enter) send_keys(Keys.ENTER)
⑥全选(Ctrl+A) send_keys(Keys.CONTROL,’a’)
⑦复制(Ctrl+C)send_keys(Keys.CONTROL,’c’)
⑧剪切(Ctrl+X)send_keys(Keys.CONTROL,’x’)
⑨粘贴(Ctrl+V)send_keys(Keys.CONTROL,’v’)
⑩键盘F1 send_keys(Keys.F1)
(5) 获得验证信息
①获取标签对之间的文本信息 text
②获得当前页面的标题 title
③获得当前页面的URL current_url
(6) 设置元素等待
①显式等待(使WebDriver等待某个条件成立时继续执行,否则在达到最大时长时抛出超时异常TimeoutException)
方法:WebDriverWait类(由until()或until_not()方法配合使用),在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过时间检测不到则抛出异常,格式:
WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
driver:浏览器驱动
timeout:最长超时时间,默认以秒为单位
poll_frequency:检测的间隔(步长)时间,默认0.5s
ignored_exceptions:超时后的异常信息,默认抛NoSuchElementException异常
until(method,message=’’)调用该方法提供的驱动程序作为一个参数,直到返回值为True
until_not(method,message=’’)调用该方法提供的驱动程序作为一个参数,直到返回值为False
例:element=WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,”kw”)))
expected_conditions类提供了预期条件判断方法
判断元素是否存在
②隐式等待(通过一定时长等待页面上某元素加载完成,如果超出了设置的时长元素还没有被加载,则抛出NoSuchElementException异常)
方法:implicitly_wait(),默认设置为0
例:driver. implicitly_wait(10),当脚本执行到某个元素定位时,如果元素可以定位,则继续执行,如果定位不到,则它将以轮询的方式不断地判断元素是否被定位到,假设第6秒定位到了元素则继续执行,若直到超出设置时长(10秒)还没定位到元素,则抛出异常
③sleep休眠方法(Python的time模块提供sleep()方法),默认秒为单位
(7) 定位一组元素
find_elements_by_....()
使用场景:批量操作元素,如勾选复选框
先获取一组元素,再从这组对象中过滤出需要操作的元素,如定位页面上所有的checkbox,然后选择其中一个
len()方法可以用来计算元素的个数
pop()方法用于获取列表中的一个元素(默认为最后一个元素,pop(0)获取第一个…),并返回该元素的值
(8) 多表单切换
switch_to.frame(“”)将当前定位的主体切换为frame/iframe表单的内嵌页面中
切换方式:id,name,index
switch_to.parent_content()跳出当前一级表单
switch_to.default_content()跳回最外层的页面
(9) 多窗口切换
switch_to.window()用于切换到相应的窗口
current_window_handle获得当前窗口句柄
window_handles返回所有窗口的句柄到当前会话
(10) 警告框处理
使用switch_to.alert()方法定位到警告消息框alert/确认消息框confirm/提示消息对话prompt,然后使用text/accept/dismiss/send_keys()等方法进行操作
text 返回alert/confirm/prompt中的文字信息
accept()接受现有警告框
dismiss()解散现有警告框
send_keys(keysToSend)发送文本至警告框
(11) 上传文件
Web页面的上传功能实现方式:
a.普通上传:普通的附件上传是将本地文件的路径作为一个值放在input标签中,通过form表单将这个值提交给服务器
找到上传的input标签,通过send_keys()方法向其输入一个文件地址来实现上传
b.插件上传:一般是指基于flash/js/ajax等技术所实现的上传功能
AutoIt
(12) 下载文件
借助AutoIt来操作Windows控件进行下载
(13) 操作Cookie(是以字典的形式存放的)
get_cookies()获得所有cookie信息
get_cookie(name)返回字典的key为“name”的cookie信息
add_cookie(cookie_dict)添加cookie;cookie_dict指字典对象,必须有name和value
delete_cookie(name,optionsString)删除cookie信息
要删除的cookie名称,该cookie的选项(路径、域)
delete_all_cookies()删除所有cookie信息
(14) 调用JavaScript(控制浏览器的滚动条,向页面中textarea文本框输入内容)
execute_script()方法来执行JavaScript代码
window.scrollTo(左边距,上边距)方法用于设置浏览器窗口滚动条的水平和垂直位置
(15) 处理HTML5的视频播放
通过js
load()加载、play()播放、pause()暂停
(16) 窗口截图
Get_screenshot_as_file(“指定截图图片的保存”a\\b\\x.gif)来截取当前窗口
(17) 关闭窗口
close()关闭当前窗口
quit()退出相关的驱动程序和关闭所有窗口
(18) 验证码的处理
a.去掉验证码,正式环境风险大
b.设置万能验证码,randint()用于生成随机数,范围1000-9999
c.验证码识别技术,python-tesseract
d.记录cookie,通过向浏览器添加cookie可以绕过登陆的验证码,如首次登陆选择“记住密码”;可以通过add_cookie()方法将用户名密码写入浏览器cookie,可用get_cookies()方法来获取所有cookie信息,从中找到用户名和密码的key
e.找开发,给测试账号固定一个验证码
(19) 单选radiobox
表现形式:<input id=”” type=”radio”name=”u2”>
radiobox=driver.find_element_by_name(“u2”).click
select=radiobox.pop(2).is_selected()
检查这个单选框是否被选中
(20) 复选checkbox
表现形式:<input type=”checkbox”name=”season”>
inputs=driver.find_elements_by_name(“season”)
for input in inputs:
ifinput.get_attribute(“type”)==’checkbox’;
input.click()
(21) 下拉菜单select
表现形式:<select name=”select”>
<option value=”zhangsan”>aaa</option>
……
</select>
Select(driver.find_element_by_id(“areaID”)).select_by_index(1)
……value(“2”)##代码中的值
……visible_text(“北京”)##下拉框拉下来可见的值
(22) Button
表现形式:<input class=”button”type=”button”disabled=”disabled”value=”Submit”>
<button class=”button”disabled=”disabled”>Submit</button>
操作:
WebElement element=driver.findElement(By.className(“button”));
Element.click();
button=element.isenabled();
检查这个按钮是不是可点击的
可以用如下代码判断Alert是否存在,在IE8上测试通过
Java代码
- public boolean isAlertPresent(){
- try
- {
- driver.switchTo().alert();
- return true;
- }
- catch (NoAlertPresentException Ex)
- {
- return false;
- }
用如下方法获取Alert上的Message:
Java代码
- public String getAlert()
- {
- Alert alert = driver.switchTo().alert();
- String str = alert.getText();
- alert.accept();
- return str;
- }
当页面上有不确定数量的Alert将要出现的时候,可以用while或者for循环去关闭所有的Alert
Java代码
- while (isAlertPresent()){
- driver.switchTo().alert().accept();
- pause (3000);
- }
python3 操作页面上各种元素的方法的更多相关文章
- dom:文档对象模型,提供的api去操作页面上的元素
dom对象通过html标签转义成了文档操作对象
- 章节十四、9-Actions类鼠标悬停、滚动条、拖拽页面上的元素
一.鼠标悬停 1.在web网站中,有一些页面元素只需要我们将鼠标指针放在上面就会出现被隐藏的下拉框或者其它元素,在自动化的过程中我们使用Actions类对鼠标进行悬停操作. 2.案例演示 packag ...
- 使用HTML5的JS选择器操作页面中的元素
文件命名为:querySelector.html,可在Chrome浏览器中预览效果. 1 <!DOCTYPE html> 2 <html lang="en"> ...
- 使用HTML5的JavaScript选择器操作页面中的元素
<!doctype html><html lang="en"> <head> <meta charset="UTF-8& ...
- JQueryiframe页面操作父页面中的元素与方法(实例讲解)
1)在iframe中查找父页面元素的方法:$('#id', window.parent.document) 2)在iframe中调用父页面中定义的方法和变量:parent.methodparent.v ...
- 点击页面上的元素,页面删除removeChild()
简单描述:最近做了一个图片上传,上传完成回显图片的时候,需要用到点击图片,从页面删除的效果,然后就找到了removeChild()方法,说实话,我刚看到的时候,就觉得这个问题已经解决了,但是却发现这个 ...
- js 取父级 页面上的元素
var bb=window.opener.frames["contentIframe"].document.all["my:费用类别"][0].value; / ...
- 六)iframe 及父子页面之间获取元素、方法调用
http://www.w3school.com.cn/tags/tag_iframe.asp father.html <!DOCTYPE html> <html> <he ...
- ASP.NET:把ashx写到类库里并在页面上调用的具体方法
在类库中建Http Handler的操作很简单,就是添加一个普通的类,然后把之前ashx里的代码几乎一模一样贴到这个类中.但要注意命名空间和类名,因为之后我们会用 到.样例Handler: names ...
随机推荐
- 一张有料的图片!!!附文件-图片合成器C语言实现算法
凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1.打开F盘,先找两个文件,一个是压缩文件(2.rar),另一个是一张图片(1.jpg),将其放到F盘目录下, ...
- 【Java多线程通信】syncrhoized下wait()/notify()与ReentrantLock下condition的用法比较
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6556925.html 一:syncrhoized使用同一把锁的多个线程用通信实现执行顺序的调度 我们知道,使 ...
- vue-cli脚手架搭建的项目怎么去除eslint验证
修改webpack.base.conf.js这个基础配置文件了.具体修改方法如下: module: { rules: [ ...(config.dev.useEslint ? [createLinti ...
- JavaScript数组对象详情
Array 数组概述 Array 类型是 ECMAScript 最常用的类型.javaScript 中的 Array 类型和其他语言中的数组有着很大的区别. 虽然数组都是有序排列,但 javaScri ...
- Django-rest-framework 接口实现 版本控制 versioning
版本控制 rest_framework 提供了 5 种版本控制 以及对应的 写法 url的 更改都可以 在 from rest_framework import versioning 中查看 Acce ...
- Python 中两个字典(dict)合并
dict1 = { "name":"owen", "age": 18 } dict2 = { "birthday": & ...
- python六十四课——高阶函数练习题(三)
案例五:求两个列表元素的和,返回新列表lt1 = [1,2,3,4]lt2 = [5,6]效果:[6,8,10,12] lt1=[1,2,3,4] lt2=[5,6] print(list(map(l ...
- centos7下kubernetes(2。kubernetes---start,重要概念)
Cluster cluster是计算,存储和网络资源的集合,kubernetes是利用这些资源运行各种基于容器的应用 Master Master是cluster的大脑,他的主要职责是调度,即决定应用在 ...
- TensorFlow的主要依赖库
Protool Buffer 处理结构化数据的工具 Name:张飞 id: 123456 email: 10000@qq.com 上面信息 就是一个结构化数据(这里说的结构化数据和大数据的结构化数据概 ...
- 【vue】在移动端使用better-scroll 实现滚动效果
安装依赖:(c)npm install better-scroll --save 引入: import BScroll from 'better-scroll' 格式: var obj = new B ...