300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 软件测试-Web自动化测试-Selenium-笔记

软件测试-Web自动化测试-Selenium-笔记

时间:2020-07-10 00:42:29

相关推荐

软件测试-Web自动化测试-Selenium-笔记

Selenium

介绍

Selenium是一个用于Web应用程序的自动化测试工具

特点

1.开源、免费

2.多浏览器支持:FireFox、Chrome、IE、Opera、Edge;

3.多平台支持:Linux、Windows、MAC;

4.多语言支持:Java、Python、Ruby、C#、JavaScript、C++;

5.对Web 页面有良好的支持;

6.简单(API 简单)、灵活(用开发语言驱动);

7.支持分布式测试用例执行。

环境搭建

基于Python环境搭建

步骤

Python开发环境(自行百度搭建)

安装Selenium包

安装浏览器(一般都有,跳过)

安装浏览器驱动--保证能够用程序驱动浏览器,实习自动化测试

安装selenium包

前提:Python3安装完毕且能正常运行

PIP工具

pip是一个通用的Python包管理工具,提供了对Python包的查找、下载、安装、卸载的功能。

以下命令在doc命令行中操作

安装

pip install selenium

卸载

pip uninsatll selenium

查看

pip show selenium

安装浏览器驱动

Chrome浏览器驱动下载地址

/mirrors/chromedriver/

找到自己浏览器对应的版本后下载,然后进行解压,并设置path

当然,可以通过简便path操作,将下载好的驱动解压至python目录下

Firefow浏览器下载地址

/mozilla/geckodriver/releases/

操作与上述一致

实操

元素定位

方式

id

name

class_name

tag_name

link_text

partial_link_text

XPath

CSS

id定位

通过元素的id属性来定位元素

前提:元素有id属性

有id属性,优先使用

方法(selenium版本不同,方法略有不同,在此的版本是4.5.0)

element = driver.find_element("id","kw")

name定位

通过元素的name属性进行定位

方法

element = driver.find_element("name","wd")

class_name定位

通过元素的class_name属性进行定位

方法

element = driver.find_element("class name","s_ipt")

link_text定位

通过超链接元素进行定位,link_text为超链接的全部文本内容

方法

element = driver.find_element("link text","新闻")

partial_link_text定位

通过超链接元素进行定位,partial_link_text为超链接的部分文本内容

方法

element = driver.find_element("partial link text","新")

XPath定位

通过标签路径进行定位

方法

element = driver.find_element("xpath", "//*[@id='kw']")

CSS选择器定位

通过标签路径进行定位

方法

element = driver.find_element("css selector", "#kw")

示例

该例子是通过百度首页进行测试

先通过谷歌打开百度首页

按F12进入调试界面

然后通过按钮找到对应元素的标签,再获取到id、name等属性

代码

from selenium import webdriverfrom time import sleep# 创建WebDriver对象driver = webdriver.Chrome()# 设置打开的网址url = ""# 使用浏览器打开指定页面driver.get(url)# 根据id获取# driver.find_element("id","kw").send_keys("查询")# driver.find_element("id","su").click()# 根据name获取# driver.find_element("name","wd").send_keys("美女")# driver.find_element("id","su").click()# 根据class name 获取# driver.find_element("class name","s_ipt").send_keys("美女")# driver.find_element("id","su").click()# 根据link text获取# driver.find_element("link text","新闻").click()# 根据 partial link text获取# driver.find_element("partial link text","新").click()# 根据CSS选择器获取# driver.find_element("css selector", "#kw").send_keys("美女")# driver.find_element("css selector", "#su").click()# driver.find_element("css selector", "[name=wd]").send_keys("美女")# driver.find_element("css selector", "#su").click()# driver.find_element("css selector",".s_ipt").send_keys("美女")# driver.find_element("css selector", "#su").click()# print(driver.find_element("css selector", "input"))# 根据Xpath获取# driver.find_element("xpath", "//*[@id='kw']").send_keys("美女")# driver.find_element("xpath", "//*[@id='kw']").clear()# 元素的其他操作# driver.find_element("xpath", "//*[@id='kw']").send_keys("美女")# driver.find_element("xpath", "//*[@id='kw']").clear()# print(driver.find_element("xpath", "//*[@id='kw']").size)# print(driver.find_element("xpath", "//*[@id='su']").text)# print(driver.find_element("xpath", "//*[@id='kw']").get_attribute())# driver.find_element("xpath", "//*[@id='su']").click()# 隐式等待# driver.find_element("css selector",".s_ipt").send_keys("美女")# driver.find_element("css selector", "#su").click()# print(driver.find_element("css selector", "a"))# driver.implicitly_wait(10)sleep(3)# 关闭浏览器driver.quit()

元素操作

目的

1.需要让脚本模拟用户给指定元素输入值

2.需要让脚本模拟人为删除元素的内容

3.需要让脚本模拟点击操作

元素常用操作方法

click() 单击元素

send_keys(value) 模拟输入

clear() 清除文本

可参照上述代码

模拟鼠标

拖动

使用场景

在网页中将一个元素拖动到指定地方

方法

chains.drag_and_drop(driver.find_element("id", "div1"), driver.find_element("id", "div2"))

移动鼠标

使用场景

在网页中移动鼠标

方法

chains.move_to_element(driver.find_element("xpath", "//*[@id='zc']/fieldset/button"))

双击

使用场景

在网页中模拟鼠标双击操作

方法

chains.double_click(driver.find_element("id", "selectA"))

代码

前置页面

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>拖拽div</title><style type="text/css">div{position:absolute;width:150px;height:150px;background-color:red;}</style><script type="text/javascript"><!--function drag(obj){if (typeof obj == "string") {var obj = document.getElementById(obj);obj.orig_index=obj.style.zIndex;//设置当前对象永远显示在最上层}obj.onmousedown=function (a){//鼠标按下this.style.cursor="move";//设置鼠标样式this.style.zIndex=1000;var d=document;if(!a) a=window.event;//按下时创建一个事件var x=a.clientX-document.body.scrollLeft-obj.offsetLeft;//x=鼠标相对于网页的x坐标-网页被卷去的宽-待移动对象的左外边距var y=a.clientY-document.body.scrollTop-obj.offsetTop;//y=鼠标相对于网页的y左边-网页被卷去的高-待移动对象的左上边距d.onmousemove=function(a){//鼠标移动if(!a) a=window.event;//移动时创建一个事件obj.style.left=a.clientX+document.body.scrollLeft-x;obj.style.top=a.clientY+document.body.scrollTop-y;}d.onmouseup=function (){//鼠标放开document.onmousemove=null;document.onmouseup = null;obj.style.cursor="normal";//设置放开的样式obj.style.zIndex=obj.orig_index;}}}--></script></head><body><div id="div1" style="width:100px;height:100px;z-index:99"> </div><div id="div2" style="left:170px; background-color:blue; z-index:98"></div><script type="text/javascript"><!--drag("div1");drag("div2");--></script></body></html>

<!DOCTYPE html><html lang="zh-cn"><head><meta charset="UTF-8"><title>注册A</title><style type="text/css">body{background: #F0F0F0}#zc{width: 500px;background: #C7C7E2;padding: 10px;margin-top: 10%;margin-left: 30%}input{padding: 5px;background: #f8f8f8}button{padding: 8px; background: #f8f8f8;border-radius: 5px}button:hover{padding: 10px; background: #2F4F4F}input:focus{background: #FFC0CB}/*span{display: none}*/</style><script type="text/javascript"></script></head><body><form action=""><div id="zc"><fieldset><legend>注册用户A</legend><p id="p1"><label for="userA">账号A</label><input type="textA" name="userA" id="userA" placeholder="账号A" required="" value=""> </p><p><label for="password">密码A</label> <input type="password" name="passwordA" id="passwordA" placeholder="密码A" value=""></p><p><label for="telA">电话号码A</label><input type="telA" name="telA" id="telA" placeholder="电话A" class="telA haha" value=""></p><p><label for="emailA">电子邮件A</label><input type="emailA" name="emailA" id="emailA" placeholder="电子邮箱A" value=""></p><button type="submitA" value="注册A" title="加入会员A">注册用户A</button><hr><p><span>Span_tagName</span></p><p><a href="" id="fwA" target="_blank">访问 百度 网站</a></p><p><a href="" id="AAA">AA 百度 网站</a></p><p><a href="" rel="nofo"></a></p><p><a href="logout">我是a标签A</a></p><p><a href="" rel="">退出</a></p><hr><p><select name="selecta" id="selectA"><option value="bj">A北京</option><option value="sh">A上海</option><option value="gz">A广州</option><option value="cq">A重庆</option></select></p><hr><form action=""><label for=""><input type="radio" name="fruit" value="pga" id="pga">A苹果</label><label for=""><input type="radio" name="fruit" value="jza" id="jza">A橘子</label><label for=""><input type="radio" name="fruit" value="xja" id="xja">A香蕉</label><label for=""><input type="radio" name="fruit" value="lia" id="lia" checked="">A梨</label><label for=""><input type="radio" name="fruit" value="xga" id="xga">西瓜</label></form><form action=""><input type="checkbox" name="checkbox" value="汽车" id="qcA">汽车A<br><input type="checkbox" name="checkbox" value="购物" id="gwA">购物A<br><input type="checkbox" name="checkbox" value="旅游" id="lyA" readonly="">旅游A <br><input type="checkbox" name="checkbox" value="音乐" id="yyA"disabled="">音乐A <br><input type="button" value="取消A" disabled="" id="cancelA"><br><input type="button" value="alerta" id="alerta" onclick="al()"> <br><input type="file" name="upfilea" value=""></form></fieldset> </div><script>function al(){alert('我被被点击啦!')}</script></form><!-- <a href="" target="myframe1">新浪</a><a href="" target="myframe1">hao123</a><a href="" target="myframe2">淘宝</a><a href="" target="myframe2">百度</a><br><iframe src="" frameborder="1" height="500" width="48%" name="myframe1"></iframe><iframe src="" frameborder="1" height="500" width="48%" name="myframe2"></iframe> --></body></html>

from selenium import webdriverfrom mon.action_chains import ActionChainsfrom time import sleepdriver = webdriver.Chrome()# url = r"E:\python_code\python_test\drag.html"url = r"E:\python_code\python_test\注册A.html"driver.get(url)chains = ActionChains(driver)# 拖动# chains.drag_and_drop(driver.find_element("id", "div1"), driver.find_element("id", "div2"))# 移动鼠标,将鼠标放置在加入会员按钮上# chains.move_to_element(driver.find_element("xpath", "//*[@id='zc']/fieldset/button"))# 双击# chains.double_click(driver.find_element("id", "selectA"))chains.perform()sleep(3)driver.quit()

注意:需要执行这个方法chains.perform()才能够有效。

键盘操作

使用场景

模拟在网页上,使用键盘输入

代码

from selenium import webdriverfrom time import sleepfrom mon.keys import Keysdriver = webdriver.Chrome()url = ""driver.get(url)element = driver.find_element("id", "kw")element.send_keys("美女")element.send_keys(Keys.BACK_SPACE)element.send_keys(Keys.CONTROL, 'a')sleep(1)# 复制element.send_keys(Keys.CONTROL, 'c')element.send_keys(Keys.CONTROL, 'v')element.send_keys(Keys.CONTROL, 'v')sleep(3)driver.quit()

注意:固定的按键如control等按键,都有方法。

下拉框操作

使用场景

在一些网页上,需要对下拉框进行选择

代码

前置网页(上面的注册A页面)

from time import sleepfrom selenium import webdriverfrom selenium.webdriver.support.select import Selectdriver = webdriver.Chrome()url = r"E:\python_code\python_test\注册A.html"driver.get(url)ele = driver.find_element("id", "selectA")select = Select(ele)sleep(1)select.select_by_index(2)sleep(1)select.select_by_value("bj")sleep(1)select.select_by_visible_text("A重庆")sleep(3)driver.quit()

滚动条

使用场景

在网页中,将页面往下滑的操作

代码

from selenium import webdriverfrom time import sleep# 创建WebDriver对象driver = webdriver.Chrome()# 设置打开的网址url = ""# 使用浏览器打开指定页面driver.get(url)js_script = "window.scrollTo(0,10000)"driver.execute_script(js_script)driver.find_element("class name","HomeFooter-friendLinkItem").click()sleep(3)# 关闭浏览器driver.quit()

警告框

使用场景

在一些页面会弹出警告框,需要点击接受或者忽略

代码

前置页面

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title><style>.box2{background: red;color: blue;}</style></head><body><!--第一级标签 2个div 1个a标签 --><!--第一个div标签中包含3个p标签,第一个p中包含1个a --><!--第二个div中包含3个p标签 --><!-- p>a --><!-- div+div+a --><div id="div1" class="box1" newattr="css_course new_attr"><p class="div1p1">div1 p1<a href="#">inner link text</a></p><p class="div1p2">div1 p2</p><p class="div1p3">div1 p3</p></div><div id="div2" class="box2"><p class="div2p1">div2 p1文本</p><p class="div2p2">div2 p2文本</p><p class="div2p3">div2 p3文本</p></div><a href="#">outter link text</a><br><input type="button" value="alert" onclick="alert('这是警告框')"><input type="button" value="confirm" onclick="confirm('这是确认框')"><input type="button" value="prompt" onclick="prompt('这是提示框')"></body></html>

from selenium import webdriverfrom time import sleep# 创建WebDriver对象driver = webdriver.Chrome()# 设置打开的网址url = r"E:\python_code\python_test\css_example.html"# 使用浏览器打开指定页面driver.get(url)driver.find_element("css selector", "[value=alert]").click()sleep(1)# 弹出框点击确定# driver.switch_to.alert.dismiss()# driver.switch_to.alert.accept()# print(driver.switch_to.alert.text)sleep(3)# 关闭浏览器driver.quit()

Frame切换

使用场景

在页面中存在多个窗体,需要切换窗体进行操作

代码

前置页面

<!DOCTYPE html><html lang="zh-cn"><head><meta charset="UTF-8"><title>表单综合实例</title><style type="text/css">body{background: #F0F0F0}form{width: 500px;background: #C7C7E2;padding: 10px;margin-top: 10%;margin-left: 30%}input{padding: 5px;background: #f8f8f8}button{padding: 8px; background: #f8f8f8;border-radius: 5px}button:hover{padding: 10px; background: #2F4F4F}input:focus{background: #FFC0CB}/*span{display: none}*/</style><script type="text/javascript"></script></head><body><form action=""><div id="zc"><fieldset><legend>注册用户</legend><p id="p1"><label for="user">账号</label><input type="text" name="user" id="user" placeholder="账号" required="" value=""> </p><p><label for="password">密码</label> <input type="password" name="password" id="password" placeholder="密码" value=""></p><p><label for="tel">电话号码</label><input type="tel" name="tel" id="tel" placeholder="电话" class="tel" value=""></p><p><label for="email">电子邮件</label><input type="email" name="email" id="email" placeholder="电子邮箱" value="" aa="ddd"></p><button type="submit" value="注册" title="加入会员">注册用户</button><hr><p><span>Span_tagName</span></p><p><a href="" id="fw" target="_blank">访问 新浪 网站</a></p><p><a href="" id="AA">AA 新浪 网站</a></p><p><a href="注册A.html" id="ZCA" target="_blank">注册A网页</a></p><p><a href="注册B.html" id="ZCB" target="_blank">注册B网页</a></p><p><a href="" rel="nofo"></a></p><p><a href="logout">我是a标签</a><s/p><p><a href="" rel="">退出</a></p><hr><p><select name="select" id="select"><option value="bj">北京</option><option value="sh">上海</option><option value="gz">广州</option><option value="cq">重庆</option></select></p><hr><form action=""><label for=""><input type="radio" name="fruit" value="pg" id="pg">苹果</label><label for=""><input type="radio" name="fruit" value="jz" id="jz">橘子</label><label for=""><input type="radio" name="fruit" value="xj" id="xj">香蕉</label><label for=""><input type="radio" name="fruit" value="li" id="li" checked="">梨</label><label for=""><input type="radio" name="fruit" value="xg" id="xg">西瓜</label></form><form action=""><input type="checkbox" name="checkbox" value="汽车" id="qc">汽车<br><input type="checkbox" name="checkbox" value="购物" id="gw">购物<br><input type="checkbox" name="checkbox" value="旅游" id="ly" readonly="">旅游 <br><input type="checkbox" name="checkbox" value="音乐" id="yy"disabled="">音乐 <br><input type="button" value="取消" disabled="" id="cancel"><br><input type="button" value="alert" id="alert" onclick="al()"> <br><input type="file" name="upfile" value=""></form></fieldset> </div><script>function al(){alert('我被被点击啦!')}</script></form><a href="" target="myframe1">新浪</a><a href="" target="myframe1">hao123</a><a href="" target="myframe2">淘宝</a><a href="" target="myframe2">百度</a><br><iframe src="注册A.html" frameborder="1" height="500" width="48%" name="myframe1" id="idframe1"></iframe><iframe src="注册B.html" frameborder="1" height="500" width="48%" name="myframe2"></iframe> </body></html>

from time import sleepfrom selenium import webdriverdriver = webdriver.Chrome()url = r'E:\python_code\python_test\注册实例.html'driver.get(url)driver.switch_to.frame("myframe1")ele_user_a = driver.find_element("id", "userA")ele_user_a.send_keys("hahaha")sleep(1)driver.switch_to.default_content()driver.switch_to.frame("myframe2")ele_user_b = driver.find_element("id", "userB")ele_user_b.send_keys("wuwuwu")sleep(3)# 关闭浏览器driver.quit()

标签页切换

使用场景

页面中会出现多个标签页,需要进行切换后操作

代码

前置页面(上述注册示例.html)

from time import sleepfrom selenium import webdriverdriver = webdriver.Chrome()url = r'E:\python_code\python_test\注册实例.html'driver.get(url)handle_a = driver.current_window_handleprint(handle_a)driver.find_element("id","ZCA").click()sleep(1)for handle in driver.window_handles:driver.switch_to.window(handle)sleep(1)sleep(3)# 关闭浏览器driver.quit()

截图

使用场景

在操作的过程中,出现错误或一些操作需要进行记录

代码

from selenium import webdriverfrom time import sleep# 创建WebDriver对象driver = webdriver.Chrome()# 设置打开的网址url = ""# 使用浏览器打开指定页面driver.get(url)driver.get_screenshot_as_file(r"E:\python_code\python_test\douyu.png")sleep(3)# 关闭浏览器driver.quit()

cookie的处理

使用场景

在打开网页的时候,可能需要进行登录或权限校验的操作,可以在打开网页后添加cookie完成验证或登录

示例

打开百度网页并传输cookie进行登录

代码

from selenium import webdriverfrom time import sleep# 创建WebDriver对象driver = webdriver.Chrome()# 设置打开的网址url = ""# 使用浏览器打开指定页面driver.get(url)driver.maximize_window()sleep(5)# “BDUSS”的值和“BAIDUID”的值在登录后的页面中查找driver.add_cookie({"name": "BDUSS", "value": "xxx"})driver.add_cookie({"name": "BAIDUID", "value": "xxx"})sleep(5)driver.refresh()sleep(3)# 关闭浏览器driver.quit()

注意:别把BDUSS的值截漏了

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。