1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > web自动化测试之Selenium

web自动化测试之Selenium

时间:2024-03-10 18:47:31

相关推荐

web自动化测试之Selenium

一、Selenium自动化测试框架

1.什么是框架?

框架(framework)是一个框子——指其约束性,也是一个架子——指其支撑性。是一个基本概念上的结构,用于去解决或者处理复杂的问题框架是整个或部分系统的可重用设计框架,其实就是某种应用的半成品

2.为什么使用框架?

自己从头实现太复杂使用框架能够更专注于业务逻辑,加快开发速度框架的使用能够处理更多细节问题使用人数多,稳定性,扩展性好

3.selenium的webdriver工作原理?

①脚本运行后,会打开指定浏览器,webdriver会将目标浏览器绑定到特定的端口,启动后的浏览器则作为webdriver的remote server,接收测试脚本的命令

②客户端(即测试脚本)通过ComandExecutor发送HTTP请求给Server

③webdriver通过浏览器的原生组件,转化Web Service的命令为浏览器的native的调用来完成操作

④用户操作Web Application的过程

4.安装selenium框架:pip install selenium==2.48.0(低版本较稳定)

二、Selenium API基础

1.浏览器驱动对象

①库的导入

from selenium import webdriver

②创建浏览器对象:driver = webdriver.xxx()

driver=webdriver.Firefox()

#谷歌浏览器需要导入chromedriver.exe驱动,驱动版本和浏览器版本一致driver=webdriver.Chrome("路径\chromedriver.exe")

③浏览器尺寸的相关操作

#浏览器窗口最大化driver.maximize_window()#获取浏览器窗口尺寸print(driver.get_window_size())#设置浏览器窗口尺寸driver.set_window_size(500,500)

④浏览器位置相关操作

#获取浏览器在屏幕显示的位置print(driver.get_window_position())#设置浏览器在屏幕显示的位置driver.set_window_position(5,5)

⑤浏览器的关闭操作

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

⑥页面请求操作

#访问url,获取响应driver.get("")#刷新当前页面driver.refresh()#访问另一个url,获取响应driver.get("/")#回退到百度的页面driver.back()#前进到之后的页面driver.forward()

2.获取断言信息的操作

①获取当前页面url

print(driver.current_url)

②获取当前浏览器标题

print(driver.title)

③通过流截取当前页面

pic=driver.get_screenshot_as_png()with open("baidu.png","wb") as f:f.write(pic)

④直接截取当前页面

driver.get_screenshot_as_file("baidu.png")

⑤输出网页源码信息

print(driver.page_source)

3.元素定位(两种方式)

①直接调用型(推荐):driver.find_element_by_xxx(value)

#1.按id定位findById=driver.find_element_by_id("kw")findById.send_keys("12306")#2.按name定位findByName=driver.find_element_by_name("wd")findByName.send_keys("10086")#3.通过伪类名class定位findByClass=driver.find_element_by_class_name("s_ipt")findByClass.send_keys("4399")#4.通过链接文本定位(必须是完整名称) link textfindByLinkText=driver.find_element_by_link_text("新闻")findByLinkText.click()#5.通过部分链接文本定位(模糊查询) partial link text#若有多个符合匹配项,则执行从上到下从左到右的第一个findByPartial=driver.find_element_by_partial_link_text("新")findByPartial.click()#6.xpath路径表达式findByXpath=driver.find_element_by_xpath('//*[@id="kw"]')submit=driver.find_element_by_xpath('//*[@id="su"]')findByXpath.send_keys("刘耀文")submit.click()#7.css选择器定位findByCss=driver.find_element_by_css_selector("#kw")submit=driver.find_element_by_css_selector("#su")findByCss.send_keys("邓紫棋")submit.click()#8.标签名定位(用的较少) tag name#案例:必应搜索driver.get("")findByTagName=driver.find_element_by_tag_name("input")submit=driver.find_element_by_tag_name("circle")findByTagName.send_keys("Ariana Grande")submit.click()

②使用By类型(需先导入By):driver.find_element(By.xxx,value)

from mon.by import By#通过By类型的idfindById=driver.find_element(By.ID,"kw")findById.send_keys("测试")

4.元素的操作

点击操作:element.click()清空输入文本:element.clear()输入文本:element.send_keys(data)

三、Selenium API高级

1.多标签/窗口之间的切换

场景:有的时候点击一个链接,新页面并非由当前页面跳转过去,而是新开一个页面,这种情况下,计算机需要识别多标签或窗口的情况

①获取所有窗口的句柄:handles = driver.window_handles

调用该方法会得到一个列表,在selenium运行过程中的每一个窗口都有一个对应的句柄存放在里面

②通过窗口的句柄进入的窗口:driver.switch_to.window(handles[n])

通过窗口句柄激活进入某一窗口,只有切换句柄才能对该句柄对应的窗口进行操作

2.多表单之间的切换

场景:在网页中,表单嵌套是很常见的情况,尤其是登录

①什么是多表单:实际上就是使用iframe/frame,引用了其他页面的链接,真正的页面数据并没有出现在当前源码中,但是在浏览器中我们看得到,简单理解就是页面中开了一个窗口显示另一个页面

②处理方法:

方式一:直接通过id值切换表单

driver.switch_to.frame(id_value)

方式二:定位到表单元素再切换

el = driver.find_element_by_xxx(el_value)driver.switch_to.frame(el)

3.弹出框操作

#进入到弹出框driver.switch_to.alert#确认弹出框信息driver.switch_to.alert.accept()#取消弹出框信息driver.switch_to.alert.dismiss()#发送文本到弹出框driver.switch_to.alert.send_keys(data)

4.滚动条操作

from selenium import webdriverimport timedriver=webdriver.Chrome("E:\PyCharm.3.3\pythonProject\selenium0425\Chrome\Application\chromedriver.exe")driver.maximize_window()#访问58driver.get("/")time.sleep(2)#scrollTo(xpos,ypos),x坐标和y坐标,位于窗口左上角#滚动条向下拉600xpjs="window.scrollTo(0,600)"driver.execute_script(js)time.sleep(2)#滚动条回到最底部(两种方式)bottom="window.scrollTo(0,document.body.scrollHeight)"#bottom="var q=document.documentElement.scrollTop=10000"driver.execute_script(bottom)time.sleep(2)#滚动条回到最顶部(两种方式)top="window.scrollTo(0,0)"#top="var q=document.documentElement.scrollTop=0"driver.execute_script(top)time.sleep(2)#滚动到指定元素位置(最常用)target=driver.find_element_by_xpath('//*[text()="IT|互联网"]')driver.execute_script("arguments[0].scrollIntoView();",target)

5.鼠标操作

from selenium import webdriver#导入动作链类,动作链可以储存鼠标的动作from selenium.webdriver import ActionChainsimport timedriver=webdriver.Chrome("E:\PyCharm.3.3\pythonProject\selenium0425\Chrome\Application\chromedriver.exe")driver.maximize_window()#访问百度driver.get("/")time.sleep(2)#定位到“更多”more=driver.find_element_by_xpath('//*[text()="更多"]')time.sleep(2)#鼠标悬停在“更多”ActionChains(driver).move_to_element(more).perform()time.sleep(2)#鼠标右击“更多”ActionChains(driver).context_click(more).perform()time.sleep(2)#鼠标左击“更多”ActionChains(driver).click(more).perform()

6.键盘操作

from selenium import webdriver#键盘操作使用的是Keys类,一般配合send_keys使用from mon.keys import Keysimport timedriver=webdriver.Chrome("E:\PyCharm.3.3\pythonProject\selenium0425\Chrome\Application\chromedriver.exe")driver.maximize_window()#访问百度driver.get("/")time.sleep(2)#定位到输入框input_box=driver.find_element_by_id("kw")input_box.send_keys("刘耀文2")time.sleep(2)#删除键(Backspace)input_box.send_keys(Keys.BACK_SPACE)time.sleep(2)#回车键(Enter)input_box.send_keys(Keys.ENTER)

send_keys(Keys.SPACE) 空格键(Space)send_keys(Keys.TAB) 制表键(Tab)send_keys(Keys.ESCAPE)回退键(Esc)send_keys(Keys.CONTROL,'a') 全选(Ctrl+A)send_keys(Keys.CONTROL,'x') 剪切(Ctrl+X)send_keys(Keys.CONTROL,'v') 粘贴(Ctrl+V)send_keys(Keys.F1) 键盘 F1……send_keys(Keys.F12)键盘 F12

7.等待

①强制等待:表示强行等待n秒再执行下一句代码,时间到了就会执行下个语句,但比较死板,不能保证在等待的时间内元素真正被加载了出来。而且如果等待的元素已经被加载出来,还需要等待时间结束才会执行下一句,浪费时间

from time import sleep 或者 import time

②隐式等待:表示在规定的时间内页面的所有元素都加载完了就执行下一步,否则一直等到时间截止,然后再继续下一步。这个方法的缺点是你需要的元素已经加载出来了,但页面还没有加载完,再需要继续等待页面加载完才能执行下一步操作。

注:driver.implicitly_wait(30)隐式等待的作用域是全局,所以一般设置在整局代码的头几行。隐式等待采用全部设置,也就是说,你所有的findElement方法都会最多等待30秒

③显式等待:显示等待明确要等到某个元素的出现,在设置时间内每隔x秒去判断一下指定的元素是否加载完,加载完了就执行下一步,否则继续每隔x秒去判断,直到时间截止。如果超时就会抛出异常。

导入显性等待的包:from selenium.webdriver.support.wait import WebDriverWait判断所需要的元素是否已经被加载出来:from selenium.webdriver.support import expected_conditions as EC定位:from mon.by import By

from selenium import webdriverfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom mon.by import Byimport time,unittestclass TestWaitClass(unittest.TestCase):@classmethoddef setUpClass(cls) -> None:cls.driver = webdriver.Chrome("E:\PyCharm.3.3\pythonProject\selenium0425\Chrome\Application\chromedriver.exe")cls.driver.maximize_window()#访问百度cls.driver.get("/")#隐式等待# cls.driver.implicitly_wait(30)def test001(self):driver=self.driver#强制等待# time.sleep(10)#显式等待WebDriverWait(driver,10,1).until(EC.presence_of_element_located((By.ID,"kw")))#定位搜索栏driver.find_element_by_id("kw").send_keys("如懿传")

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