20170627Selenium自动化

时间:2022-04-09 01:33:39

                                           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实现上传  下载使用

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

20170627Selenium自动化---WebDriverAPI