Selenium

selenium

selenium是一个第三方库,python有很多库;

1、什么是ui自动化?

通过模拟手工操作用户ui页面的方式,用代码去实现自动化操作和验证的行为。

2、ui自动化的优点?

(1)解决重复性的功能测试和验证

(2)减少测试人员在回归测试时用例漏测和验证点的漏测

(3)减少冒烟测试,回归测试的人力成本,节省时间,提高测试效率

3、ui自动化缺点?

(1)需求不稳定,比如,敏捷开发速度快,ui频繁变更,定位不稳定,提高了用例维护的成本

(2)用例的覆盖率少,占用例总数的15%-30%

(3)场景覆盖占当前功能场景70%-80%

4、ui自动化和功能测试哪个更重要?

都重要

原因:(1)功能测试是基础,在熟悉功能的前提下才能做好ui自动化

5.selenium是一个第三方库:下载这个库

(1)在dos中下载

pip install   selenium==3.141.0

图片

(2)在pycharm中的setting下载

图片

图片

图片

第三方库存放地址

图片

出现版本urllib高,需要降低版本

图片

图片

6.安装浏览器:建议谷歌

(1)安装版本,查看自己的版本

图片

(2)对应的驱动和谷歌

对应版本镜像链接1:http://chromedriver.storage.googleapis.com/index.html

图片

对应版本镜像链接2:https://registry.npmmirror.com/binary.html?path=chromedriver/

图片

谷歌下载低版本:https://downzen.com/en/windows/google-chrome/versions/ 不同版本的

图片

https://googlechromelabs.github.io/chrome-for-testing/#stable  最新版本Google驱动歌

图片

(3)将驱动放在python文件下

图片

7.编写运行代码:

from  selenium  import   webdriver #导入selenium模块中的webdriver
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("http://49.233.201.254:8080/cms/manage/login.do") #通过get打开页面
dx.maximize_window() #窗口最大化
dx.find_element_by_id("userAccount").send_keys("admin") #找到id属性,输入账号

查看元素

图片

调用浏览器

# from selenium import webdriver #导入一个selenium 库中导入webdriver模块
'''
在Python中做UI自动化:selenium'''
# 创建一个drvier对象用来调用打开浏览器,对浏览器实现操作
# driver =webdriver.Chrome()  #主讲谷歌浏览器
#driver =webdriver.Ie()
#driver =webdriver.firefox()
'''通过调用webdrvier.来引用对应的浏览器,生成一个浏览器对象
注意事项:webdrvier. 点后面的浏览器名称不要自己输入用联想
还有自己添加一个英文的小括号() 小括号的作用是:把它声明成为
一个匿名对象 那么当前的drvier就是一个浏览器驱动对象,可以用它来
对对应的浏览器实现操作的动作'''
# UI自动化所有的调用都必须在最前面加上一个drvier对象
# 通过对象来打开谷歌浏览器且输入网址
# driver.get('http://www.baidu.com')
# 通过对象调用get方法来打开一个网站URL

一.打开窗口

1.dx,.get  打开网站

from  selenium  import   webdriver #导入selenium模块中的webdriver
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("http://49.233.201.254:8080/cms/manage/login.do"#通过get打开页面

图片

(2)重开窗口打开页面

from  selenium  import   webdriver #导入selenium模块中的webdriver
import  time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("http://49.233.201.254:8080/cms/manage/login.do"#通过get打开页面
time.sleep(2)
w="window.open('https://www.baidu.com')"
dx.execute_script(w)

图片

二、时间等待

1.强制等待 sleep(xx)

2.隐性等待 implicitly_wait(xx)

3.显性等待 WebDriverWait

案例:

from  selenium  import   webdriver #导入selenium模块中的webdriver
import  time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("http://49.233.201.254:8080/cms/manage/login.do"#通过get打开页面
# time.sleep(5) #强制等待
dx.implicitly_wait(10#隐式等待
#WebDriverWait#显示等待
w="window.open('https://www.baidu.com')"
dx.execute_script(w)

三.页面刷新

dx.refresh() #刷新

图片

代码:

from  selenium  import   webdriver #导入selenium模块中的webdriver
import  time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("http://49.233.201.254:8080/cms/manage/login.do"#通过get打开页面
time.sleep(2)
dx.refresh() #刷新

四.返回上一页,切换到下一页

dx.back() 返回上一也
dx.forward() #切换到下一页

图片

代码:

from  selenium  import   webdriver #导入selenium模块中的webdriver
import  time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("http://49.233.201.254:8080/cms/manage/login.do"#通过get打开页面
time.sleep(2)
dx.get("https://www.baidu.com")
time.sleep(2)
dx.back() #切换到上一页
time.sleep(2)
dx.forward() #切换到下一页

五.设置窗口

(1)窗口最大化

语句:

dx.maximize_window()
from  selenium  import   webdriver #导入selenium模块中的webdriver
import  time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("http://49.233.201.254:8080/cms/manage/login.do"#通过get打开页面
time.sleep(2)
dx.maximize_window()

图片

(2)设置窗口大小

dx.set_window_size(500,500)

图片

代码:

from  selenium  import   webdriver #导入selenium模块中的webdriver
import  time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("http://49.233.201.254:8080/cms/manage/login.do"#通过get打开页面
time.sleep(2)
dx.maximize_window()
time.sleep(2)
dx.set_window_size(500,500)

六.截图

from  selenium  import   webdriver #导入selenium模块中的webdriver
import  time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("http://49.233.201.254:8080/cms/manage/login.do"#通过get打开页面
dx.get_screenshot_as_file(r"E:\az\f\aa.png")

图片

七.quit 退出所有窗口  ,close关闭当前窗口

(1)quit

from  selenium  import   webdriver #导入selenium模块中的webdriver
import  time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("http://49.233.201.254:8080/cms/manage/login.do"#通过get打开页面
time.sleep(2)
w="window.open('https://www.baidu.com')"
dx.execute_script(w)
dx.quit()

(2)close 关闭当前拆窗口

from  selenium  import   webdriver #导入selenium模块中的webdriver
import  time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("http://49.233.201.254:8080/cms/manage/login.do"#通过get打开页面
time.sleep(2)
w="window.open('https://www.baidu.com')"
dx.execute_script(w)
time.sleep(2)
# dx.quit()
dx.close()

selenium的定位

一.selenium中的定位9种方法

图片

 二.详解定位方法

案例:

https://www.baidu.com

图片

(1)通过f12 或者开发者工具点开页面元素

(2)查看属性值

图片

1.id定位方法

id=kw

from  selenium  import   webdriver #导入selenium模块中的webdriver
import  time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("https://www.baidu.com") #通过get打开页面
time.sleep(2)
dx.maximize_window()
dx.find_element_by_id("kw").send_keys("id定位")

图片

2.name定位方法

from  selenium  import   webdriver #导入selenium模块中的webdriver
import  time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("https://www.baidu.com") #通过get打开页面
time.sleep(2)
dx.maximize_window()
dx.find_element_by_name("wd").send_keys("name定位")

图片

3.class定位方法

class=s_ipt

from  selenium  import   webdriver #导入selenium模块中的webdriver
import  time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("https://www.baidu.com") #通过get打开页面
time.sleep(2)
dx.maximize_window()
dx.find_element_by_class_name("s_ipt").send_keys("class定位")

图片

4、link定位方法

图片

from  selenium  import   webdriver #导入selenium模块中的webdriver
import  time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("https://www.baidu.com") #通过get打开页面
time.sleep(2)
dx.maximize_window()
dx.find_element_by_link_text("hao123").click()

图片

5.partial_link_text() 模糊文本值

from  selenium  import   webdriver #导入selenium模块中的webdriver
import  time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("https://www.baidu.com") #通过get打开页面
time.sleep(2)
dx.maximize_window()
dx.find_element_by_partial_link_text("hao").click()

图片

6.xpath定位:

图片

路径定位://*[@id="kw"]

from  selenium  import   webdriver #导入selenium模块中的webdriver
import  time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("https://www.baidu.com") #通过get打开页面
time.sleep(2)
dx.maximize_window()
dx.find_element_by_xpath('//*[@id="kw"]').send_keys("xpath定位")

图片

7.css定位

图片

css  辅助#kw

from  selenium  import   webdriver #导入selenium模块中的webdriver
import  time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("https://www.baidu.com") #通过get打开页面
time.sleep(2)
dx.maximize_window()
dx.find_element_by_css_selector("#kw").send_keys("css定位方法")

图片

8. tag_name 方法:就是元素属性

图片

通过input来定位

from  selenium  import   webdriver #导入selenium模块中的webdriver
import  time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("https://www.baidu.com") #通过get打开页面
time.sleep(2)
dx.maximize_window()
inputs=dx.find_elements_by_tag_name("input") #找到标签input
for i  in  inputs:
    if   i.get_attribute("name")=="wd":
        i.send_keys("tag_name定位方法")

图片

9:js定位

from  selenium  import   webdriver #导入selenium模块中的webdriver
import  time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("https://www.baidu.com") #通过get打开页面
time.sleep(2)
dx.maximize_window()
js='document.getElementById("kw").value="js定位"'
dx.execute_script(js)

图片

10.定位方法运用:

在这9种常用的定位方法中,优先顺序
1)有id优先使用id定位
2)没有id,考虑使用name或者class定位。
3)如果没有id,name,class再考虑用xpath,css定位。
4)如果是链接可以考虑使用link_text,partial_link_text 定位。
5)tag_name和JavaScript还是用的比较少的。
我们根据实际情况,具体问题具体分析

Xpath定位

一.xpath 定位

格式:dx.find_element_by_xpath(xpath表达式)

两个定位:

1、绝对定位:

特点:1.以单斜杠/开头;

2.从页面根元素(HTML标签)开始,严格按照元素在HTML页面中的位置和顺序向下查找

右键copy  full  path复制

如:/html/body/div[2]/div[1]/div[5]/div/div/form/span[1]/input

2、相对定位:(我们一般都是用相对定位来定位的)

特点:1.以双斜杠//开头;

2.不考虑元素在页面当中的绝对路径和位置;

3.只考虑是否存在符合表达式的元素即可。

2.1使用标签名+节点属性定位

//*[@id="kw"]

语法://标签名[@属性名=属性值]

图片

图片

案例:

from  selenium  import   webdriver #导入selenium模块中的webdriver
import  time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("https://www.baidu.com") #通过get打开页面
time.sleep(2)
dx.find_element_by_xpath('//*[@id="form"]/span[1]/input[1]').send_keys("path中层级定位")
# dx.find_element_by_xpath('//input[@id="kw"]').send_keys("xpath中的标签定位")
# dx.find_element_by_xpath('//*[@autocomplete="off" and @name="wd" ]').send_keys("xpath中组合属性and定位")
# dx.find_element_by_xpath('//*[@autocomplete="off"]').send_keys("xpath中的其他属性定位")
# dx.find_element_by_xpath('//*[@class="s_ipt"]').send_keys("xpath中的class定位")
# dx.find_element_by_xpath('//*[@name="wd"]').send_keys("xpath中的name定位")
# dx.find_element_by_xpath('//*[@id="kw"]').send_keys("xpath中的id定位")

图片

二.css 定位

from  selenium  import   webdriver #导入selenium模块中的webdriver
import  time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("https://www.baidu.com") #通过get打开页面
time.sleep(2)
dx.find_element_by_css_selector("#form>span>input").send_keys("css中层级爷爷级方法")
# dx.find_element_by_css_selector("#form > span.bg.s_ipt_wr.new-pmd.quickdelete-wrap>input").send_keys("css中层级父级方法")
# dx.find_element_by_css_selector("[autocomplete='off'][class='s_ipt']").send_keys("css中组合属性方法")
# dx.find_element_by_css_selector("[autocomplete='off']").send_keys("css中其他属性方法")
# dx.find_element_by_css_selector(".s_ipt").send_keys("css中class简写方法")
# dx.find_element_by_css_selector("[class='s_ipt']").send_keys("css中class全称方法")
# dx.find_element_by_css_selector("[name='wd']").send_keys("css中name全称方法")
# dx.find_element_by_css_selector("[id='kw']").send_keys("css中id全称方法")
# dx.find_element_by_css_selector("#kw").send_keys("css中id简写方法")
time.sleep(20)
dx.close()

图片

定位

1、定位文本框,密码框,按钮

案例:

网站:

http://49.233.201.254:8080/cms/manage/login.do

图片

图片

图片

from  selenium  import   webdriver #导入selenium模块中的webdriver
from  time import *
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("http://49.233.201.254:8080/cms/manage/login.do") #通过get打开页面
sleep(2)
dx.find_element_by_id("userAccount").send_keys("admin")
sleep(2)
dx.find_element_by_id("loginPwd").send_keys("123456")
sleep(2)
dx.find_element_by_id("loginBtn").click()

图片

2.链接,隐藏框

(1)链接 link_text

from  selenium  import   webdriver #导入selenium模块中的webdriver
import  time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("https://www.baidu.com") #通过get打开页面
time.sleep(2)
dx.find_element_by_link_text("网盘").click()

(2)隐藏框

图片

图片

案例1
from  selenium  import   webdriver #导入selenium模块中的webdriver
from  selenium.webdriver.common.action_chains import  ActionChains
import  time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("https://www.baidu.com") #通过get打开页面
time.sleep(2)
wz=dx.find_element_by_link_text("更多")
ActionChains(dx).move_to_element(wz).perform()
time.sleep(2)
dx.find_element_by_link_text("健康").click()

图片

案例2:

ActionChains()括号中接当前浏览器对象

move_to_element()括号中接当前你要模拟悬停的具体元素位置

.perform()对当前的位置进行点击悬停(类似于鼠标放在上面的动作)''

from  selenium  import   webdriver #导入selenium模块中的webdriver
from  selenium.webdriver.common.action_chains import  ActionChains
import  time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("https://www.baidu.com") #通过get打开页面
time.sleep(2)
dx.maximize_window()
time.sleep(2)
wz=dx.find_element_by_id("s-usersetting-top")
ActionChains(dx).move_to_element(wz).perform()
time.sleep(2)
dx.find_element_by_xpath('//*[@id="s-user-setting-menu"]/div/a[3]/span').click()

通过点击:

from  selenium  import   webdriver #导入selenium模块中的webdriver
from  selenium.webdriver.common.action_chains import  ActionChains
import  time
dx=webdriver.Chrome() #创建一个驱动谷歌浏览器的对象
dx.get("https://www.baidu.com") #通过get打开页面
time.sleep(2)
dx.maximize_window()
time.sleep(2)
dx.find_element_by_id("s-usersetting-top").click()
time.sleep(2)
dx.find_element_by_link_text("高级搜索").click()拓展:

ActionChains类(鼠标操作)

常用于模拟鼠标的行为,比如单击、双击、拖拽等行为

       click(on_element=None)     --- 鼠标单击

       double_click(on_element=None)    ---  双击      

       context_click(on_element=None)   ---  右击      

       click_and_hold(on_element=None)   ---  鼠标单击并且按住不放

       drag_and_drop(source,target)   ---  拖拽

       drag_and_drop_by_offset(source,xoffset,yoffset)   ---  将目标拖动到指定的位置

       key_down(value,element=None)  ---  按下某个键盘上的键

       key_up(value,element=None)   ---  松开某个键

       move_by_offset(xoffset,yoffset)   ---  鼠标从当前位置移动到某个坐标

       move_to_element(to_element)   ---  鼠标移动到某个元素

       move_to_element_with_offset(to_element,xoffset,yoffset)  

---  移动到距某个元素(左上角坐标)多少距离的位置

       perform()    ---  执行链中的所有动作

       release(on_element=None)   ---  在某个元素位置松开鼠标左

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值