selenium测试框架快速搭建详解

张开发
2026/4/10 9:21:48 15 分钟阅读

分享文章

selenium测试框架快速搭建详解
点击文末小卡片免费获取软件测试全套资料资料在手涨薪更快一、介绍Selenium目前主流的web自动化测试框架支持多种编程语言Java、pythan、go、js等selenium 提供一系列的api 供我们使用因此在web测试时我们要点页面中的某一个按钮那么我们只需要获取页面然后根据id或者name找到对应的按钮然后执行click操作就可以完成点击这一个动作。测试点点点虽然容易复现但做回归测试的时候会出现大量重复的工作因此可以通过自动化每次做回归测试我们只需要运行相关的脚本即可。Selenium2:使用Selenium自动化测试框架主要用到Selenium Webdriver模块能模拟提供浏览器、页面元素定位、元素操作、鼠标键盘等相关的操作和方法ui自动化测试主要应用在回归测试、兼容性测试、冒烟测试等测试场景适合的是需求稳定、项目周期长、测试脚本可以复用的项目。二、selenium安装及配置浏览器谷歌chrome推荐、火狐、IE等驱动chromedriver.exe谷歌 地址ChromeDriver - WebDriver for Chrome - Downloads安装selenium包pip install selenium -U -U 表示已安装则更新下载对应浏览器版本 的chromedriver.exe否则有可能会报找不到驱动的错把驱动包放到python的根目录下WebDriver原理图WebDriver是一个基于HTTP的协议它提供了一系列的接口用于发现和控制 Web 文档中的 DOM 元素几乎可以操作浏览器做任何事情。总的来说就是python编写代码通过webdriver控制浏览器。三、脚本实例from selenium import webdriver import time #打开浏览器 driver webdriver.Chrome() #浏览器最大化 driver.maximize_window() # 打开baidu driver.get(http://www.baidu.com) #打印浏览器地址 print(driver.current_url) #打印网页标题 print(driver.title) #暂停一会,3 秒 time.sleep(3) #关闭当前窗口 driver.close() #关闭整个浏览器并且关闭驱动chromedriver driver.quit()UnittestPython的单元测试框架模块在此框架下编写具体的业务测试用例 脚本另外此框架能组织测试用例集的执行和测试场景恢复标准库 time 模块主要提供对时间的相关操作 os.path 模块主要提供对文件路径相关的操作logging模块主要提供对日志相关的设置 smtplib 模块主要负责发送邮件等第三方模块库HTMLTestRunner 模块主要用于生成HTML格式的可视化测试报告xlrd模块是读取excel文件数据的模块xlwt模块是向excel文件中写入数据的模块四、元素定位在测试时浏览器 点击F12打开控制台 即可以看到页面的所有按钮、输入框等id属性激活元素选择器点击对应的按钮、输入框就可以在控制台看到对应信息根据id属性定位元素调用driver提供给的方法定位。id定位driver.find_element_by_id(id)#打开百度输入软件测试点击百度一下 driver.find_element_by_id(kw).send_keys(软件测试) driver.find_element_by_id(su).click()name定位el driver.find_element_by_name(name)#输入selenium 自动化点击百度一下 driver.find_element_by_name(wd).send_keys(selenium自动化) #百度一下按钮没提供名字 driver.find_element_by_id(su).click()class定位el driver.find_element_by_class_name(bt_class)tagName定位el driver.find_element_by_tag_name(tagName)xpath定位绝对路径定位el driver.find_element_by_xpath(xpath)css定位el driver.find_element_by_css_selector(css)link_text 定位根据它的超链接定位el driver.find_element_by_link_text(linkText)partial_link_text定位el driver.find_element_by_partial_link_text(linkPartText)获取当前 页面的urldriver.current_url获取元素的文本值driver.find_element_by_id(iptUsername).text浏览器窗口最大化driver.maximize_window()查看浏览器名字driver.name打开网页driver.get(www.baidu.com)打开浏览器driver webdriver.Chrome()关闭窗口driver.close()五、元素操作元素赋值 el driver.find_element_by_id(iptUsername).send_keys(admin)清空元素值 el.clear()获取元素文本 el.text获取元素指定属性的值 get_attribute(obj)上传文件找到 typefile 的按钮点击按钮然后把按钮的文字改为图片名driver.find_element_by_css_selector([typefile]).clickdriver.find_element_by_css_selector([typefile]).send_keys(helloword.jpg)六、执行JavaScript操作当webdriver 遇到无法完成的操作时可以使用javascript来完成webdriver提供了execute_script()接口来调用js代码。 方法execute_script(script, *args)执行 JavaScript代码是一个非常强大的功能可以实现WebElement 接口所有功能甚至更多的功能。比如在web性能测试中可以调用Web API接口window.performance来测试Web性能。#打开百度页面把百度一下 改成 test driver.get(http://www.baidu.com) driver.execute_script(document.getElementById(su).value test)七、窗口切换浏览器窗口切换例如浏览器打开多个窗口需要从一个窗口跳转到另一个窗口做自动化测试。要转到另一个页面才能找到元素。原理是每个打开的窗口都有唯一的标识叫做句柄可以通过不同的句柄实现窗口切换。# 当前窗口url地址 print(driver.current_url) #暂停一会,10 秒 time.sleep(10) # 打印所有窗口句柄 windows driver.window_handles print(windows,\n) #切换到最后的窗口 driver.switch_to.window(windows[-1]) #打印url核对下是不是最后的窗口或者根据网页名等校验 print(driver.current_url) print(\n\n) time.sleep(3) #切换到第二个窗口 #先获取现在的窗口 current_window driver.current_window_handle # 获取第二个窗口的索引(由当前窗口索引1) next_window_index windows.index(current_window) 1 # 切换到第二个窗口 driver.switch_to.window(windows[next_window_index]) print(driver.current_url)iframe切换如果元素包含在iframe中也会导致无法找到元素例如代码也会找不到id为kw的input输入框使用 driver.find_element_by_id(kw) 跑出无法找到的异常。iframe srcframe.html idmyframe namemyframe input idkw / /iframeselenium提供了switch_to.frame()方法用于实现frame的切换此方法接收id、name、index以及selenium的WebElement对象用来实现切换比如上述的代码中要切换到iframe中则可以使用以下代码实现from selenium import webdriver driver webdriver.Chrome() # 通过id切换iframe driver.switch_to.frame(myframe) # 通过name切换iframe # driver.switch_to.frame(myframe) # 通过index切换iframe0代表第一个 # driver.switch_to.frame(0) # 通过WebElement对象切换iframe # driver.switch_to.frame(driver.find_element_by_tag_name(iframe))当操作完frame中的元素后经常需要重新切换到主界面进行其他操作切换回主页面使用方法如下driver.switch_to.default_content()若是frame里嵌套frame这需要一层层切换下去。有多层frame需要回到上一级的用父framedriver.switch_to.parent_frame()alert弹窗切换alert窗口是js提示框不属于web界面#切换到alert窗口 ;获取alert 窗口 alert driver.switch_to_alert #获取alert的文本内容 print(alert.text) #点击确定关闭弹框 alert.accept() #点击取消关闭弹簧 alert.dismiss()八、鼠标经过操作selenium鼠标事件(单击/双击/右击/拖动)详细解说selenium鼠标事件用的是ActionChains。需要import相关模块。from selenium.webdriver.common.action_chains import ActionChains如找到百度一下按钮移到该位置from selenium.webdriver.common.action_chains import ActionChains from selenium import webdriver chr_driver webdriver.Chrome() chr_driver.maximize_window() chr_driver.get(https://www.baidu.com/) ele chr_driver.find_element_by_id(su) # 实例化,悬浮、点击可以连续调用多个方法是因为返回的都是self对象 ActionChains(chr_driver).move_to_element(ele).pause(0.5).click(ele).perform()ActionChains的常用方法#单击鼠标左键 click(on_elementNone) #点击鼠标左键不松开 click_and_hold(on_elementNone) #点击鼠标右键 context_click(on_elementNone) #双击鼠标左键 double_click(on_elementNone) #拖拽到某个元素然后松开 drag_and_drop(source, target) #拖拽到某个坐标然后松开 drag_and_drop_by_offset(source, xoffset, yoffset) #按下某个键盘上的键 key_down(value, elementNone) #松开某个键 key_up(value, elementNone) #鼠标移动到某个元素悬浮 move_to_element(to_element) #执行链中的所有动作 perform()九、拖拽如打开百度地图拖拽、验证码验证的拖拽动作from selenium.webdriver.common.action_chains import ActionChains #打开浏览器 driver webdriver.Chrome() #浏览器最大化 driver.maximize_window() #打开百度地图 driver.get(https://map.baidu.com/12697919.69,2560977.31,12z) #定位地图 mask driver.find_element_by_id(mask) #动作 ac ActionChains(driver) ac.move_to_element(mask).click_and_hold().move_by_offset(50,50).release().perform()十、页面等待强制等待 time.sleep()隐式等待driver.implicitly_wait(t) 隐式等待在指定的时间 t 内等待页面加载完成如果加载完成的时间小于 t 剩余的时间就不再等如果时间 t 内未加载完成则报错。作用范围全局显式等待WebDriverWait(driver , timeout , poll_frequency).until(element)导入from selenium.webdriver.support.ui import WebDriverWait显式等待可以看做是特殊的隐式等待在指定的时间 t 内等待指定元素加载完成如果加载完成时间小于 t 剩余的时间就不再等待如果没能在 t 时间内加载完成则报错。方法WebDriverWait(driver , timeout , poll_frequency)driver表示浏览器对象timeout表示超时时间poll_frequency扫描间隔时间一般0.5秒扫描一次页面。element 指定加载的元素十一、截图driver.save_screeshot(file) file 图片在本地保存的路径及名字如 driver.save_screeshot(./首页.jpg)driver.get_screenshot_as_file(file)使用场景通常是断言失败有错误的时候保存截图方便还原现场。十二、调用js代码excute_script(js)如为只读元素设定值设定日期js document.getElementById(date).value 2022-05-27 driver.execute_script(js)十三、警告框处理警告框的三种类型alert只有确定按钮confirm有确定和取消按钮prompt可以输入内容方法swtch_to.alert.text获取警告框中的文本信息swtch_to.alert.accept()在警告框中点击确定swtch_to.alert.dismiss()在警告框中点击取消swtch_to.alert.send_keys(value)在警告框中输入内容#打印警告框中的文本信息 print(swtch_to.alert.text) #在警告框中点击确定 driver.swtch_to.alert.accept() #在警告框中点击取消 driver.swtch_to.alert.dismiss() #在警告框中输入内容 100块 driver.swtch_to.alert.send_keys(100块)十四、下拉框导入模块from selenium.webdriver.support.select import select假设下拉框为 s 选择下拉框中的选项 Select(s).方法()方法options 返回下拉框中的所有选项select_by_index()通过索引选择select_by_value()通过选项的value属性值选择select_by_visible_text()通过选项的文本值选择#定位下拉框内容是省份 s driver.find_element_by_id(province) #获取下拉框里的所有选项内容 opt Select(s).options #通过索引选择;若是通过value选择则html代码要写有value属性 Select(s).select_by_index(-1)十五、ActionChains 动作链ActionChains 可以帮助模拟鼠标操作如单击、双击、点击鼠标右键、拖拽等等。使用actionchains对象方法行为事件是存储在actionchains对象队列。当你使用perform()事件按顺序执行。调用方法有两种#链式写法 ActionChains(driver).click(click_btn).double_click(doubleclick_btn).perform() #分步写法 ActionChains(driver).click(click_btn) ActionChains.double_click(doubleclick_btn) ActionChains.perform()ActionChains常用方法click(on_elementNone) ——单击鼠标左键 click_and_hold(on_elementNone) ——点击鼠标左键不松开 context_click(on_elementNone) ——点击鼠标右键 double_click(on_elementNone) ——双击鼠标左键 drag_and_drop(source, target) ——拖拽到某个元素然后松开 drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某个坐标然后松开 key_down(value, elementNone) ——按下某个键盘上的键 key_up(value, elementNone) ——松开某个键 move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标 move_to_element(to_element) ——鼠标移动到某个元素 move_to_element_with_offset(to_element, xoffset, yoffset) ——移动到距某个元素左上角坐标多少距离的位置 perform() ——执行链中的所有动作 release(on_elementNone) ——在某个元素位置松开鼠标左键 send_keys(*keys_to_send) ——发送某个键到当前焦点的元素 send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素十六、table表格处理table表格代码如下table border1 tr tdrow 1, cell 1/td tdrow 1, cell 2/td /tr tr tdrow 2, cell 1/td tdrow 2, cell 2/td /tr /table获取表格里的内容通过 table-tr-td 层层获取#获取table table driver.find_elements_by_id(table) #获取 tr tr table.find_elements_by_tag_name(tr) #获取td td tr[1].find_elements_by_tag_name(td) #输出内容 print(td[1].text)十七、生产报告连接数据库把所有的测试用例运行结果输入数据库然后读取数据库生成测试报告如项目的总测试用例数、成功用例数、失败用例数、跳过数每个模块的测试用例数、成功用例数、失败用例数、跳过数最后下方这份完整的软件测试 视频教程已经整理上传完成需要的朋友们可以自行领取【保证100%免费】​​​软件测试面试文档我们学习必然是为了找到高薪的工作下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料并且有字节大佬给出了权威的解答刷完这一套面试资料相信大家都能找到满意的工作。

更多文章