测试开发的进阶之路_5

心情再不好也要继续更博。。。。路还是要继续走下去,生活还是要继续经历下去

这节学习web自动化测试工具selenium   官方文档 https://selenium-python-zh.readthedocs.io/en/latest/

1.selenium简介

selenium是一个用于测试网站的自动化测试工具,开源,免费;多浏览器支持:Firefox、Chrome、IE、Opera、Safari;多平台支持:Linux 、windows、Mac;多语言支持:Java、Python、ruby、PHP、C#、JavaScript

2.selenium安装

pip install Selenium

3.下载浏览器驱动

如果想使用selenium驱动不同的浏览器,必须单独下载并设置不同的浏览器驱动。

1)各浏览器下载地址:

Firefox浏览器驱动:geckodriver

Chrome浏览器驱动:chromedriver , taobao备用地址

IE浏览器驱动:IEDriverServer

Edge浏览器驱动:MicrosoftWebDriver

Opera浏览器驱动:operadriver

PhantomJS浏览器驱动:phantomjs

2)设置浏览器的地址非常简单。 我们可以手动创建一个存放浏览器驱动的目录,如: C:\driver , 将下载的浏览器驱动文件(例如:chromedriver、geckodriver)丢到该目录下。

我的电脑-->属性-->系统设置-->高级-->环境变量-->系统变量-->Path,将“C:\driver”目录添加到Path的值中。

  • Path
  • ;C:\driver

3)验证不同的浏览器驱动是否正常使用。

from selenium import webdriver


driver = webdriver.Firefox()   # Firefox浏览器

driver = webdriver.Chrome()    # Chrome浏览器

driver = webdriver.Ie()        # Internet Explorer浏览器

driver = webdriver.Edge()      # Edge浏览器

driver = webdriver.Opera()     # Opera浏览器

driver = webdriver.PhantomJS()   # PhantomJS

4.selenium入门

1)控制浏览器:控制浏览器操作的一些方法

方法说明
set_window_size()设置浏览器的大小
back()控制浏览器后退
forward()控制浏览器前进
refresh()刷新当前页面
clear()清除文本
send_keys (value)模拟按键输入
click()单击元素
submit()用于提交表单
get_attribute(name)获取元素属性值
is_displayed()设置该元素是否用户可见
size返回元素的尺寸
text获取元素的文本

示例:

###1.控制浏览器
# browser = webdriver.Chrome()#声明浏览器 
# url = 'https:www.baidu.com' 
# browser.get(url)#打开浏览器预设网址 
# browser.maximize_window() #浏览器最大化
# time.sleep(2) #休眠2s等待时间
# browser.set_window_size(480,800) #设置浏览器的高度和宽度
# browser.back() #浏览器后退
# time.sleep(2)
# browser.forward() #浏览器前进
# time.sleep(2)
# browser.refresh()
# browser.close() #关闭浏览器

2)元素定位:Selenium提供了8种定位方式:

  1. id
  2. name
  3. class name
  4. tag name
  5. link text
  6. partial link text
  7. xpath
  8. css selector
定位一个元素定位多个元素含义
find_element_by_idfind_elements_by_id通过元素id定位
find_element_by_namefind_elements_by_name通过元素name定位
find_element_by_xpathfind_elements_by_xpath通过xpath表达式定位
find_element_by_link_textfind_elements_by_link_tex通过完整超链接定位
find_element_by_partial_link_textfind_elements_by_partial_link_text通过部分链接定位
find_element_by_tag_namefind_elements_by_tag_name通过标签定位
find_element_by_class_namefind_elements_by_class_name通过类名进行定位
find_elements_by_css_selectorfind_elements_by_css_selector通过css选择器进行定位

示例:

####元素定位操作 BY ID
browser = webdriver.Chrome()#声明浏览器 
url = 'https:www.baidu.com' 
browser.get(url)#打开浏览器预设网址 
browser.maximize_window()
# time.sleep(3) #
element1 = browser.find_element_by_id('kw')
# element1.clear()
element1.send_keys("ccfan")
time.sleep(3)
element1.clear()
element1.send_keys("myzhou4")
# # print (element1)
time.sleep(2)
element2 = browser.find_element_by_id("su")
element2.click()
# print (browser.title)

####元素定位操作 BY name
# browser = webdriver.Chrome()#声明浏览器 
# url = 'https:www.baidu.com' 
# browser.get(url)#打开浏览器预设网址 
# browser.maximize_window()
# time.sleep(3) #
# element1 = browser.find_element_by_name('wd')
# element1.clear()
# element1.send_keys('ccfan')
# time.sleep(10)
#element2 = browser.find_element_by_name('')###无name属性

ps:定位一组元素的方法与定位单个元素的方法类似,唯一的区别是在单词element后面多了一个s表示复数。

3)鼠标事件:在 WebDriver 中, 将这些关于鼠标操作的方法封装在 ActionChains 类提供。

方法说明
ActionChains(driver)构造ActionChains对象
context_click()执行鼠标悬停操作
move_to_element(above)右击
double_click()双击
drag_and_drop()拖动
move_to_element(above)执行鼠标悬停操作
context_click()用于模拟鼠标右键操作, 在调用时需要指定元素定位
perform()执行所有 ActionChains 中存储的行为,可以理解成是对整个操作的提交动作

示例:

####鼠标操作
# from selenium.webdriver.common.action_chains import ActionChains
# browser = webdriver.Chrome()
url = "https:www.baidu.com"
# browser.get(url)
# browser.maximize_window()
# time.sleep(2)
# element1 = browser.find_element_by_name("tj_settingicon")
# element1 = browser.find_element_by_id('s-usersetting-top')
# element1.click()
# ActionChains(browser).move_to_element(element1).perform()  ###鼠标悬停
# element1 = browser.find_element_by_id('kw')
# element1 = browser.find_element_by_link_text("新闻")
# ActionChains(browser).context_click(element1).perform()
# ActionChains(browser).double_click(element1).perform()

4)键盘事件:Selenium中的Key模块为我们提供了模拟键盘按键的方法,那就是send_keys()方法。它不仅可以模拟键盘输入,也可以模拟键盘的操作。

模拟键盘按键说明
send_keys(Keys.BACK_SPACE)删除键(BackSpace)
send_keys(Keys.SPACE)空格键(Space)
send_keys(Keys.TAB)制表键(Tab)
send_keys(Keys.ESCAPE)回退键(Esc)
send_keys(Keys.ENTER)回车键(Enter)

组合键的使用

模拟键盘按键说明
send_keys(Keys.CONTROL,‘a’)全选(Ctrl+A)
send_keys(Keys.CONTROL,‘c’)复制(Ctrl+C)
send_keys(Keys.CONTROL,‘x’)剪切(Ctrl+X)
send_keys(Keys.CONTROL,‘v’)粘贴(Ctrl+V)
send_keys(Keys.F1…Fn)键盘 F1…Fn

5)多窗口切换

在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要主机切换到新打开的窗口上进行操作。WebDriver提供了switch_to.window()方法,可以实现在不同的窗口之间切换。

方法说明
current_window_handle获得当前窗口句柄
window_handles返回所有窗口的句柄到当前会话
switch_to.window()用于切换到相应的窗口,与上一节的switch_to.frame()类似,前者用于不同窗口的切换,后者用于不同表单之间的切换。

示例:

from selenium import webdriver
browser = webdriver.Chrome()
browser.get("http://www.baidu.com")

#1.获得百度搜索窗口句柄
sreach_windows = browser.current_window_handle

browser.find_element_by_link_text('登录').click()
browser.find_element_by_link_text("立即注册").click()

#1.获得当前所有打开的窗口的句柄
all_handles = browser.window_handles

#3.进入注册窗口
for handle in all_handles:
    if handle != sreach_windows:
        browser.switch_to.window(handle)
        print('跳转到注册窗口')
        browser.find_element_by_name("account").send_keys('123456789')
        browser.find_element_by_name('password').send_keys('123456789')
        time.sleep(2)

6)获取断言信息:通过我们获取title 、URL和text等信息进行断言。

属性说明
title用于获得当前页面的标题
current_url用户获得当前页面的URL
text

获取搜索条目的文本信息

示例:

from selenium import webdriver
from time import sleep

driver = webdriver.Firefox(executable_path ="F:\GeckoDriver\geckodriver")
driver.get("https://www.baidu.com")

print('Before search================')

# 打印当前页面title
title = driver.title
print(title)

# 打印当前页面URL
now_url = driver.current_url
print(now_url)

driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
sleep(1)

print('After search================')

# 再次打印当前页面title
title = driver.title
print(title)

# 打印当前页面URL
now_url = driver.current_url
print(now_url)

# 获取结果数目
user = driver.find_element_by_class_name('nums').text
print(user)

#关闭所有窗口
driver.quit()

7)多表单切换:在Web应用中经常会遇到frame/iframe表单嵌套页面的应用,WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌页面上的元素无法直接定位。这时就需要通过switch_to.frame()方法将当前定位的主体切换为frame/iframe表单的内嵌页面中。

方法说明
switch_to.frame()将当前定位的主体切换为frame/iframe表单的内嵌页面中
switch_to.default_content()跳回最外层的页面

示例:

126邮箱登录框的结构大概是这样子的,想要操作登录框必须要先切换到iframe表单。

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://www.126.com")

driver.switch_to.frame('x-URS-iframe')
driver.find_element_by_name("email").clear()
driver.find_element_by_name("email").send_keys("username")
driver.find_element_by_name("password").clear()
driver.find_element_by_name("password").send_keys("password")
driver.find_element_by_id("dologin").click()
driver.switch_to.default_content()

driver.quit()

8)显示等待和隐式等待

  • sleep(): 强制等待,设置固定休眠时间。后脚本的执行过程中执行 sleep()后线程休眠,而另外两种线程不休眠。
  • implicitly_wait():隐式等待,是设置的全局等待。设置等待时间,是对页面中的所有元素设置加载时间,如果超出了设置时间的则抛出异常。隐式等待可以理解成在规定的时间范围内,浏览器在不停的刷新页面,直到找到相关元素或者时间结束。
  • WebDriverWait():显示等待,是针对于某个特定的元素设置的等待时间,在设置时间内,默认每隔一段时间检测一次当前页面某个元素是否存在,如果在规定的时间内找到了元素,则直接执行,即找到元素就执行相关操作,如果超过设置时间检测不到则抛出异常。默认检测频率为0.5s,默认抛出异常为:NoSuchElementException。

还有。。。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值