20170627Selenium自动化---WebDriverAPI

                                           Selenium自动化之WebDriver API

看了虫师的《自动化测试实战》一书,学到了很多,非常感谢。特此记录下学习笔记,供以后学习使用。

一. 元素定位

1.find_element_by_id();                        id定位

2.find_element_by_name();                  name定位

3.find_element_by_class_name();             class属性定位

4.find_element_by_tag_name();                tag属性定位

5.find_element_by_link_text();                   元素标签之前的文本信息来定位

6.find_element_by_partial_link_text();       取文本链接的一部分来定位

7.find_element_by_xpath();

其中xpath有多种定位策略:

①绝对路径:find_element_by_xpath("html/body/div[2]/div[2]/div[3]/div[2]/form/input[1]");

②元素属性:find_element_by_xpath("//input[@id=‘qwe‘]");

find_element_by_xpath("//input[@name=‘qwe‘]");

find_element_by_xpath("//input[@class=‘qwe‘]");

find_element_by_xpath("//*[@id=‘qwe‘]");

③层级属性:find_element_by_xpath("//span[@class=‘qwe‘]/input");

find_element_by_xpath("//form[@id=‘qwe‘]/span[2]/input");

④运算逻辑:find_element_by_xpath("//input[@id=‘qwe‘ and @class=‘qwer‘]/span/input");

8.find_element_by_css_selector();            css选择器定位

其中css也有多种策略:

①class属性:find_element_by_css_selector(".qwe");

②id属性:     find_element_by_css_selector("#qwe");

③标签名:     find_element_by_css_selector("input");

A.父子关系: find_element_by_css_selector("span>input");

B.属性定位: find_element_by_css_selector(‘[type="submit"]‘);

C.组合定位: find_element_by_css_selector("form.fm>span>input>input.qwe");

9.BY元素定位

以上提到的8种定位方法,webdriver还提供了另一套写法,即统一调用find_element()方法,通过BY来声明定位的方法,并且传入对应定位方法的定位参数。

使用BY之前需要插入BY类:

from selenium.webdriver.common.by import By

find_element(BY.ID,"qwe");

find_element(BY.NAME,"qwe");

find_element(BY.CLASS_NAME,"qwe");

find_element(BY.TAG_NAME,"qwe");

find_element(BY.LINK_TEXT,"某某测试部");

find_element(BY.PARTIAL_LINK_TEXT,"测试部");

find_element(BY.XPATH,"//* [@id=‘qwe‘]");

find_element(BY.CSS_CELECTOR," span>input ");

二.控制浏览器 

1.控制浏览器窗口大小

①set_window_size();

如set_window_size(640,480); 即宽640,高480

②maximize_window(); 窗口最大化,不需要参数,直接使用

2.控制浏览器进退、前进

back(); 返回

forwar(); 前进

如 driver.back(); 其中driver=webdriver.Chrome()

3.模拟浏览器刷新

refresh(); 如driver.refresh()类似F5

4.简单元素操作

①clear(); 清除文本

②send_keys(*value); 模拟按键输入

③click(); 单击元素

举例:

driver.find_element_by_id("qwe").clear()

driver.find_element_by_id("qwe").send_keys("zhang")

driver.find_element_by_id("login").click()

5.webelement接口常用方法

size:返回元素的尺寸

text:获取元素的文本

get_attributte(name):获得属性

is_displayed():设置改元素是否用户可见

举例:

size=driver.find_element_by_id("qwe").size    获取输入框的尺寸

text=driver.find_element_by_id("qwe").text    获取文本信息

attributte = driver.find_element_by_id("qwe").get_ attributte(‘type‘)  可以是id、name、type或其他任意属性

result= driver.find_element_by_id("qwe"). is_displayed()  返回元素的结果是否可见,返回结果为Ture或者False

5.鼠标事件

perform():
执行所有ActionChains中存储的行为

context_click():
右击

double_click():
双击

drag_and_drop(element,
target

move_to_element():
鼠标悬停

举例:

①rom
selenium.webdriver.common.action_chains import ActionChains   先引入ActionChains类

driver =
webdriver.Chrome()

driver.get("http://www.baidu.com")

#...

#定位到要右击的元素

right_click
= driver.find_element_by_id("qwe")

#对定位到的元素执行鼠标右击操作

ActionChains(driver).context_click(right_click).perform()

说明:

ActionChains(driver):调用这个类,将浏览器驱动driver作为参数传入

context_click(right_click):模拟邮件操作,在使用时需要指定元素定位

perfom():将指定所有ActionChains中存储的行为。

②above=driver.find_element_by_id("qwer")

ActionChains(driver).move_to_element(above).perfom()

其他方法类似

6.键盘事件

Keys类提供了键盘上所有的按键方法

from
selenium.webdriver.common.keys import Keys

send_keys(Keys.BACK_SPACE)        删除键

send_keys(Keys.
SPACE)                  空格键

send_keys(Keys.TAB)                        制表键

send_keys(Keys.ESCAPE)                 回退键

send_keys(Keys.ENTER)                   回车键

send_keys(Keys.CONTROL,‘a‘)         全选

send_keys(Keys.CONTROL,‘
c‘)        复制

send_keys(Keys.CONTROL,‘x‘)          剪贴

send_keys(Keys.CONTROL,‘v‘)          粘贴

send_keys(Keys.F1)

...

send_keys(Keys.F12)                         F1-F12

7.获得验证信息

title,
URL, text

举例:

now_url=driver.current_url
获取当前页面URL

title=driver.title
获取当前页面title

text前边已经提及到,不赘述

8.设置元素等待

①显式等待:WebDriverWait(driver,poll_fequency=0.5,ignored_exceptions=None)

②隐式等待:driver.implicitly_wait(time)
time可自定义

③sleep休眠:sleep(time)  time可自定义

9.定位一组元素

在之前定位单个元素的的element后加s

find_elements_by_id();

find_elements_by_name();

find_elements_by_class_name();

find_elements_by_tag_name();

find_elements_by_link_text();

find_elements_by_partial_link_text();

find_elements_by_xpath();

find_elements_by_css_selector();

10.多表单切换

driver.swtich_to.frame()

11.多窗口切换

driver.switch_to.widow()  用于切换到相应的窗口

current_window_handle  获取当前窗口句柄

window_handles   返回所有窗口的句柄到当前会话

12.警告框处理

text:返回
alert/confirm/prompt中的文字信息

accept():
接受现有警告框

dismiss():
解散现有警告框

send_keys(keysToSend):
发送文本至警告框

13.上传文件

普通上传:将本地文件的路径作为一个值放在input标签中,通过form表单将这个值提交给服务器

插件上传:指基于Flash,JavaScript或Ajax等技术实现上传功能

①send_keys()

如:

from selenium import webdriver

import os

driver = webdriver.Chrome()

file_path=‘file:///‘ + os.path.abspath(‘upfile.html‘)

driver.get(file_path)

#定位上传按钮,添加本地文件

driver.find_element_by_name("file").send_keys(‘D:\\upload_file.txt‘)

driver.quit()

②AutoIt实现上传  下载使用http://www.autoitscript.com/site/

14.下载文件

from selenium import webdriver

import os

fp=webdriver.Firefoxprofile()

fp.set_preference("browser.download.folderList",2)#0是默认路径,2是指定路径

fp.set_preference("browser.download.manager.showWhenStarting",False)#是否显示开始

fp.set_preference("browser.download.dir",os.getcwd())#用于指定所下载的文件的目录

fp.set_preference("browser.helperApps.neverAsk.saveToDisk","application/octet-stream")#下载文件的类型

driver=webdriver.Firefox(firefox_profile=fp)

driver.get("http://pypi.Python.org/pypi/selenium")

driver.find_element_by_partial_link_text("selenium-2").click()

15.操作Cookie

WebDriver操作cookie的方法:

get_cookies(): 获取所有的cookie信息

get_cookie(name): 返回字典的key为“name”的cookie信息

add_cookie(cookie_dict):添加cookie。cookie_dict为字典对象,必须有name,value值

delete_cookie(name,optionsString):删除cookie信息

delete_all_cookies():删除所有的cookie信息

16.调用JavaScipt

调整浏览器滚动条位置

window.scrollTo(左边距,上边距)

17.处理HTML5的视频播放

load(),play(), pause()   加载,播放,暂停

18.窗口截图

driver.get_screenshot_as_file("D:\\xxxxx")#截取当前窗口,并指定截图图片的保存位置

19.关闭窗口

quit():退出相关程序和关闭所有窗口;

close():关闭当前窗口

20.验证码的处理

①去掉验证码

②设置万能验证码

③验证码识别技术

④记录cookie

时间: 2024-11-05 21:43:43

20170627Selenium自动化---WebDriverAPI的相关文章

ui自动化---WebDriverApi接口

一.webdriver client原理 当测试脚本启动Chrome的时候,selenium-webdriver 会首先在新线程中启动Chrome浏览器.启动后selenium-webdriver会将Chrome绑定到特定的端口,绑定完成后该chrome实例便作为webdriver的remote server存在:客户端(也就是测试脚本)创建1个会话,在该session中通过http请求向remote server发送请求,remote server解析请求,完成相应操作并返回response:

通过beego快速创建一个Restful风格API项目及API文档自动化(转)

通过beego快速创建一个Restful风格API项目及API文档自动化 本文演示如何快速(一分钟内,不写一行代码)的根据数据库及表创建一个Restful风格的API项目,及提供便于在线测试API的界面. 一.创建数据库及数据表(MySQL) #db--jeedev -- ---------------------------- -- Table structure for `app` -- ---------------------------- DROP TABLE IF EXISTS `a

C# 最佳工具集合: IDE 、分析、自动化工具等

C#是企业中广泛使用的编程语言,特别是那些依赖微软的程序语言.如果您使用C#构建应用程序,则最有可能使用Visual Studio,并且已经寻找了一些扩展来对您的开发进行管理.但是,这个工具列表可能会改变您编写C#代码的方式. C#编程的最佳工具有以下几类: IDE VS扩展 编译器.编辑器和序列化 反编译和代码转换工具 构建自动化和合并工具 版本控制 测试工具和VS扩展 性能分析 APM 部署自动化 容器 使用上面的链接直接跳转到特定工具,或继续阅读以浏览完整列表.

自动化运维工具介绍

运维目标有三个阶段,第一是追求稳定性,第二是追求标准化,第三是追求自动化.对于第三阶段来说,什么是运维自动化呢?简单地讲,运维自动化就是将日常重复性工作按照事先设定好的规则,在一定时间范围内自动化运行,而不需要人工参与.接下来简单介绍运维自动化工具,要了解运维平时用到的自动化工具,就需要了解运维人员的日常工作有哪些. 一.运维的日常工作 运维的日常工作可以总结为以下四个部分,分别是: (1) 系统安装 (2) 应用程序配置(Configuration) (3) 命令执行与控制(Command a

Python自动化运维课程学习--Day3

本文为参加老男孩Python自动化运维课程第三天学习内容的总结. 大致内容如下: 1.文件操作 2.字符编码转码相关操作 3.函数 0.关于本文中所有运行Python代码的环境: --操作系统:Ubuntu 16.10 (Linux 4.8.0) --Python版本:3.5.2 python2.7.12 --Python IDE: PyCharm 2016.3.2 一.文件操作: 1.文件操作流程:以只读.写(覆盖写).追加写.读写.追加读写.二进制读写等模式打开文件 ==> 得到文件句柄,并

浅谈前端自动化构建

前言 现在的前端开发已经不再仅仅只是静态网页的开发了,日新月异的前端技术已经让前端代码的逻辑和交互效果越来越复杂,更加的不易于管理,模块化开发和预处理框架把项目分成若干个小模块,增加了最后发布的困难,没有一个统一的标准,让前端的项目结构千奇百怪.前端自动化构建在整个项目开发中越来越重要. 我们首先来回想一下之前我们是如何来开始做一个项目的. ① 首先要确定这个项目要使用什么样的技术来实现,然后开始规划我们的项目目录,接着就要往项目增加第三方库依赖,比如: 拷贝 CSS库(Yui Reset |

自动化安装之DHCP基本原理和配置

DHCP:(Dynamic Host Configuration Protocol) C/S架构 原理: 当DHCP客户端启动时,它会自动与DHCP服务器通信,由DHCP服务器为DHCP客户端提供自动分配IP地址的服务.当然高级的DHCP,不光只是分配地址这么简单,今天我们的课程只是架设一个普通的DHCP的服务器, client端能获取到上网必须的网络配置信息.安装了DHCP服务软件的服务器称为DHCP服务器,而启用了DHCP功能的客户机称为DHCP客户端,DHCP服务器是以地址租约的方式为DH

CMDB专家实践谈:自动化运维的基石CMDB

CMDB是什么? 运维百花齐放繁荣景象的同时,也让碎片化问题产生:每个人都想整合运维平台,但是往往事与愿违. CMDB就像一个人的大脑核心,是一个信息协调库,其存储的资料是协调身体完成各种复杂运动的信息来源. 我心中的CMDB .碎片整合 面向运维工具的碎片化场景,是盘活整个运维管理的数据核心 .元数据库 提供运维活动的基础元数据,是唯一可信的运维配置数据服务 .场景驱动 为运维联动提供数据驱动,可协调工具来完成各类自动化场景 自动扩容+自动监控 CMDB如何建设? 痛点现象与对策I模型建不好

再不自动化就晚啦!教你4步打造基于CentOS的产品镜像

随着Linux程序的增多,软件的安装过程中经常出现如下问题: 1.硬件配置类似或者相同时,批量安装系统和软件,希望实现自动化安装,减~·少安装时间和人为出错. 2.工程实施人员在不同客户现场进行系统和软件安装(硬件配置不同),由于硬件有差别,不容易实现自动化. 笔者针对以上场景,从提高生产效率,减少误操作的立场,提出如下解决方案,希望能达到抛砖引玉的目的,并能与同行进行深入的探讨,发现不足之处. 背景知识点 Anaconda是RedHat.CentOS.Fedora等Linux的安装管理程序,它