《selenium2自动化测试实战-基于python语言》第二遍

1.selenium1与selenium2的区别

Selenium1(selenium remote control,简称Selenium RC)具体流程:

Selenium2:

https://www.jianshu.com/p/226d655426c6

https://blog.csdn.net/Yve_Mei/article/details/46530661

 

2.selenium2主要组成?

Selenium本身并不是一个单独的工具,它包含IDE、Gird、Webdriver等几个部分

 

3.分层自动化

分层的自动化测试:UI、Service、Unit

分层自动化测试倡导的是从黑盒(UI)单层到黑白盒多层的自动化测试体系,从全面黑盒自动化测试到对系统的不同层次进行自动化测试。

 

在金字塔中每一层测试的投入比例则要根据实际的产品特征来划分。在《google测试之道》一书中提到,google对产品测试类型划分为:小测试、中测试和大测试,采用70%/20%/10%的比例,大体对应测试金字塔中的Unit,Service和UI层。

 

 

4.前端工具介绍:

FireBug在2017年已经停止更新了,需要调试html/css等可以使用FireFox dev tools

 

5.WebDriver

WebDriver属于Selenium体系中设计出来操作浏览器的一套API

 

 

 

 

 

 

 

6.selenium几种定位方式

①Id定位:

find_element_by_id(“kw”)

HTML规定id属性在HTML文档中必须是唯一的。

②name定位:

find_element_by_name(“wd”)

Name的属性值,在当前页面中可以不唯一

③class定位:

find_element_by_class_name(“s_ipt”)

HTML规定class来指定元素的类名。

④tag定位:

find_element_by_tag_name(“input”)

一个tag往往用来定义一类功能,所以通过tag识别某个元素的概率很低。

⑤link定位:

find_element_by_link_text(“新闻”)

专门用来定位文本链接

⑥partial link定位:

find_element_by_partial_link_text(“一个很长的”)

取文本链接的一部分定位,只要这一部分信息可以唯一地标识这个链接。

 

注:在实际项目中,有时候一个元素并没有id , name属性,或者页面上多个元素的id和name属性值相同,又或者每一次刷新页面,id值都会随机变化。

 

⑦XPath定位

绝对路径定位:find_element_by_xpath(“/html/body/div/div[2]/div/div/div/from/span/input”)

用标签名的层级关系来定位元素的绝对路径,最外层为html语言。Div[2]表示当前层级下的第二个div标签。

 

利用元素属性定位:find_element_by_xpath(“//input[@id=’kw’]”)

//表示当前页面某个目录下,input表示定位元素的标签名,[@id=’kw’]表示这个元素的id属性值等于kw。

如果不想指定标签名,则也可以用星号(*)代替。

 

层级与属性结合:find_element_by_xpath(“//span[@class=’bgs_ipt_wr’]/input”)

如果一个元素本身没有可以唯一表示这个元素的属性值,那么我们可以找其上一级元素,如果它的上一级元素有可以唯一标识属性的值,也可以拿来使用。

 

使用逻辑运算符:find_element_by_xpath(“//input[@id=’kw’ and @class=’su’]/span/input”)

一个属性不能唯一地区分一个元素,我们还可以使用逻辑运算符连接多个属性来查找元素。

 

 

 

 

 

⑧CSS定位

选择器

例子

描述

.class

.intro

Class选择器,选择class=”intro”的所有元素

#id

#firstname

Id选择器,选择id=”firstname”的所有元素

*

*

选择所有元素

element

p

元素所有<p>元素

element>element

div>input

选择父元素为<div>的所有<input>元素

element+element

div+input

选择同一级中紧接在<div>元素之后的所有<input>元素

[attribute=value]

[target=_blank]

选择target=”_blank”的所有元素

 

通过class属性定位:find_element_by_css_selector(“.s_ipt”)

通过id属性定位:find_element_by_css_selector(“#kw”)

通过标签名:find_element_by_css_selector(“input”)

通过父子关系定位:find_element_by_css_selector(“span>input”)

通过属性定位:find_element_by_css_selector(“autocomplete=off”)

组合定位:find_element_by_css_selector(“span.bg s_ipt_wr>input.s_ipt”)

 

 

 

⑨用By定位元素

使用之前需要将By类导入:from seleniuim.webdriver.common.by import By

 

 

 

7.控制浏览器

控制浏览器窗口大小:set_window_size()

                    Maximize_window()

 

控制浏览器后退、前进:back()、forward()

 

模拟浏览器刷新:refresh()

 

简单元素操作:clear() 清除文本

              send_keys(*value) 模拟按键输入

  click() 单击元素

              

              WebElement接口常用方法:

              submit() 提交表单

    size 返回元素的尺寸

  text 获取元素的文本

  get_attribute(name) 获得属性值

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

  

鼠标事件:

actionChains提供了鼠标操作的常用方法:

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

context_click() 右击

double_click() 双击

drag_and_drop() 拖动

move_to_element() 鼠标悬停

 

键盘事件:

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) 键盘F1

 

获得验证信息:

title 用于获得当前页面的标题

current_url 用户获得当前页面的URL

 

 

设置元素等待:

显式等待

WebDriverWait(driver,5,0.5).until(expected_conditions.presence_of_element_located((By.ID),”kw”))

显式等待使WebDriver等待某个条件成立时继续执行,否则在达到最大时长时抛出超时异常

隐式等待

implicitly._wait()

隐式等待是通过一定的时长等待页面上某元素加载完成。

sleep休眠方法

sleep()

固定时间的休眠

 

 

 

定位一组元素:

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_elemetns_by_xpath()

find_elements_by_css_selector()

一般用于以下场景:

-批量操作元素,例如勾选页面上所有的复选框

-先获取一组元素,再从这组对象中过滤出需要操作的元素。例如定位出页面上所有的checkbox,然后选择其中的一个选择操作。

 

 

多表单切换:

switch_to.frame()

默认可以直接取表单的id或name属性。

#切换到iframe(id=”if”)

driver.switch_to.frame(“if”)

如果iframe没有可用的Id和name属性,可以这样:

xf=driver.find_element_by_xpath(‘//*[@class=”if”]’)

driver.switch_to.frame(xf)

switch_to.parent_content()跳出当前一级表单

switch_to.default_content()跳回最外层的页面

 

 

多窗口切换:

switch_to_window()

current_window_handle 获得当前窗口句柄

window_handles 获得当前所有打开的窗口的句柄

 

 

警告框处理:

switch_to_alert() 定位到alert/confirm/prompt

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

accept() 接受现有警告框

dismiss() 解散现有警告框

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

 

 

 

 

 

上传文件:

send_keys实现上传,这样可以避免操作windows控件

driver.find_element_by_name(“file”).send_keys(‘D:\\upload_file.txt’)

 

AutoIt实现上传

 

下载文件:

火狐浏览器通过FirefoxPorfile()对其做一些设置。

不同浏览器设置方法会有所不同。通用的方法还是借助AutoIt来操作windows控件进行下载。

 

 

操作cookie:

get_cookies()

get_cookie(name)

add_cookie(cookie_dict)

delete_cookie(name,optionsString)

delete_all_cookies()

 

 

调用JavaScript:

#通过javascript设置浏览器窗口的滚动条位置

js=”window.scrollTo(100,450);”

driver.execute_script(js)

 

 

处理HTML5的视频播放:

video=driver.find_element_by_xpath(“body/Setion[1]/div/video”)

url=driver.execute_script(“return arguments[0].currentSrc;”,video) 返回播放地址

driver.execute_script(“return arguments[0].play()”,video) 播放视频

driver.execute_script(“arguments[0].pause()”,video) 暂停视频

 

 

窗口截图:

如:driver.get_screenshot_as_file(“D:\\pyse\\baidu_img.jpg”)

 

 

关闭窗口:

quit() 退出相关的驱动程序和关闭所有窗口

close() 关闭当前窗口

 

 

 

 

验证码的处理:

让开发去掉验证码;

设置万能验证码;

验证码识别技术;

记录cookie,可以用get_cookies()方法获取登录的所有的cookie信息,从中找到用户名和密码的key;再通过add_cookie()方法将用户名和密码写入浏览器cookie

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值