文章目录
- 一、请描述实现用户登陆模拟自动化测试的思路。
- 二、基于Web端呈现的产品如何做自动化测试,谈谈你的思路和方向。
- 三、什么是web自动化测试?
- 四、什么是selenium?
- 五、写出selenium中你最熟悉的接口或类(*)
- 六、findElement()和findElements()有什么区别?
- 七、登录按钮,除了用click方法进行点击外还有其他的方式吗?
- 八、怎么提高selenium的执行速度(*)
- 九、怎么验证复选按钮是不是被选择?
- 十、alert弹窗相关
- 十一、WebDriverWait的quit()和close()方法的区别
- 十二、web端的自动化测试,如何实现非input类型的文件上传
- 十三、iframe处理
- 十四、切换句柄
- a、获得百度浏览器的搜索页面窗口
- b、点击“hao123”标签,跳转到hao123页面
- c、获取所有的窗口句柄
- d、切换到hao123页面
- e、如果再次切换到搜索页面
- 十五、测试中遇到readonly属性的控件,需要如何处理?
- 十六、如何用webdriver进行鼠标右键点击操作?
- 十七、在selenium中如何实现截图,如何实现用例执行失败才截图
- 十八、web自动化测试前置数据怎么准备?(*)
- 十九、selenium的工作原理(*)
- 二十、自动化测试在什么阶段执行会带来什么收益?(*)
- 二十一、Appium和Selenium的关系和区别
- 二十二、影响ui自动化测试脚本的稳定性因素有那些?(*)
- 二十三、如果一个元素无法定位,你一般会考虑那些方面的原因?(*)
- 二十四、po模式封装的原则有哪些?
- 二十五、xpath和css选择器什么区别?
- 二十六、请尽可能多的列出自动化的元素定位方式
- 二十七、当web自动化用例数量达到一定的数量后,如何去优化执行效率?(******)
- 二十八、用例在运行过程中经常会出现不稳定的情况,也就是说这次可以通过,下次就没办法通过了,如何去提升用例的稳定性?(******)
- 二十九、web自动化假设一个商品每个账号只能购买一次要怎么实现自动化(思维方式)
- 三十、app自动化这部分,你用的什么框架?
- 三十一、selenium和appium有什么优势?
- 三十二、在编写UI自动化测试过程中有哪些地方是令你头疼的(******)
- 三十三、po模式
- 三十四、在执行脚本自动化过程中,如何对象操作的元素进行高亮显示?
- 三十五、selenium一般完成什么类型的测试,自动化覆盖率?(******)
- 三十六、selenium是否支持桌面应用软件的自动化测试
- 三十七、UI页面如果频繁变化,自动化如何处理?(*)
- 三十八、selenium下拉菜单如何定位?
- 三十九、selenium三大切换指的是什么?
- 四十、selenium如何判断元素是否存在?
- 四十一、移动端应用及其服务端的测试点?(*)
- 四十二、PageObject是什么?
- 四十三、鼠标悬浮操作
- 四十四、app自动化用的是真机还是虚拟机?
- 四十五、自动化测试有什么缺点?
- 四十六、selenium中,js如何操作隐藏元素?
- 四十七、你如何模拟浏览器的前后移动
- 四十八、获取当前页面的URL
- 四十九、获取文本框中的文字
- 五十、如何清除文本框中的内容
- 五十一:如何在webdriver中调用应用程序
- 五十二、selenium是否支持用例的执行的引擎
- 五十三、selenium是否有读取excel文件的库?
- 五十四、selenium有哪些组件?
- 五十五、selenium有什么限制或者缺陷
- 五十六、说下遇到过哪些常见的selenium异常?(*)
- 五十七、如何在webdriver中实现同步?
- 五十八、如何判断一个页面上元素是否存在?
- 五十九、写UI自动化用例的步骤
- 六十、如何设计一个高质量的UI自动化脚本?(******)
- 六十一、UI自动化跑的很慢,你有什么方法让它跑的快点?(******)
- 六十二、selenium怎么保证操作元素的成功率?(******)
- 六十三、selenium中隐藏的元素能定位吗?
- 六十四、验证百度可以正常打开
- 六十五、什么是断言和验证?
- 六十六、DOM对象是什么?
- 六十七、如何去定位页面上动态加载的元素?
- 六十八、怎么保证测试质量(******)
- 六十九、如果页面上获取不到元素怎么办?
一、请描述实现用户登陆模拟自动化测试的思路。
web端的自动化测试,基本就是模拟手工测试人员做功能测试。用脚本的自动执行代替人的操作。
基于用户登录的自动化测试思路:使用python+selenium+pytest框架来编写登录的所有测试用例,使用PO模式实现数据和代码分层,使用allure测试报告,并使用邮件和钉钉告知项目组的相关人员。
二、基于Web端呈现的产品如何做自动化测试,谈谈你的思路和方向。
web端呈现的产品有2个方向可以做自动化测试:接口层和界面层,且接口层自动化的比例要高于界面层。
界面层主要对产品稳定的功能进行自动化测试,主要用于产品的核心功能冒烟测试、回归测试。从系统最核心的功能开始做,再根据情况慢慢铺开。
三、什么是web自动化测试?
Web自动化测试是从UI(用户界面)层面进行的自动化测试,测试人员通过编程自动化程序(测试用例脚本)来打开浏览器测试网站的业务逻辑。
四、什么是selenium?
Selenium是一个开源的web自动化测试框架,支持多种编程语言开发自动化测试脚本,支持跨浏览器平台进行测试
五、写出selenium中你最熟悉的接口或类(*)
WebDriver
ChromeDriver
WebElement
WebDriverWait
FirefoxDriver
六、findElement()和findElements()有什么区别?
findElement():查找一个页面元素,只会返回一个WebElement对象
findElements():查找页面上所有符合匹配的元素,返回元素集合。
七、登录按钮,除了用click方法进行点击外还有其他的方式吗?
可以使用submit方法,前提是input元素的type为submit
八、怎么提高selenium的执行速度(*)
1、保证网络畅通
2、浏览器不卡
3、最好使用独立的测试环境,防止数据被使用
4、最好使用独立的测试账号,防止数据被其他人占用
5、提前准备好测试数据
6、使用显性等待+隐形等待
7、采用xpath相对定位表达式,尽量不要使用动态定位方式
8、可以是一些主流程、比较频繁的测试用例
9、减少不必要的操作
10、使用多线程实现并发执行测试用例
11、减少不必要的操作,例如经过三四步才能打开我们要测试的页面的话,直接通过网址打开。
九、怎么验证复选按钮是不是被选择?
可以使用元素的 is_selected() 方法,如果返回的是true则说明被选择,否则表明未选中。
十、alert弹窗相关
获取alert弹窗:alert=driver.switch_to.alert
获取alert弹窗上的文本:alert.text
alert弹窗文本输入:alert.send_keys()
取消弹窗:alert.dismiss()
确认弹窗:alert.accept()
十一、WebDriverWait的quit()和close()方法的区别
driver.quit():关闭整个浏览器
driver.close():关闭当前正在操作的窗口
十二、web端的自动化测试,如何实现非input类型的文件上传
与windows窗口进行交互。采用pywinauto
十三、iframe处理
def switch_frame(frame_el):
driver.switch_to.frame(frame_el)
el=driver.find_element_by_xpath('//input[@id="kw"]')
el.input('kobe')
frame_el=driver.find_element_by_xpath('//iframe[@name="baidu"]')
switch_frame(frame_el)
iframe切换回主页面和父级iframe
driver.switch_to.default_content()
在一个iframe中,如果还嵌套了另一个iframe-------了解
进入:一个一个的进,先进第一层的iframe,一层一层的进
如果出呢:一层一层的出
十四、切换句柄
以百度浏览器测试:
a、获得百度浏览器的搜索页面窗口
search_window=driver.current_window_handle
b、点击“hao123”标签,跳转到hao123页面
driver.find_element_by_xpath('//a[text()="hao123"]').click()
time.sleep(2)
c、获取所有的窗口句柄
all_handles=driver.window_handles
d、切换到hao123页面
for handle in all_handles:
if handle!=search_window:
driver.switch_to.window(handle)
driver.find_element_by_xpath('//a[text()="网易"]').click()
e、如果再次切换到搜索页面
driver.switch_to.window(search_window)
十五、测试中遇到readonly属性的控件,需要如何处理?
先修改关闭readonly属性,然后再操作元素。
十六、如何用webdriver进行鼠标右键点击操作?
action=ActionChains(driver)
action.context_click(元素对象).perform()
十七、在selenium中如何实现截图,如何实现用例执行失败才截图
driver.save_screenshot(图片路径)
通过捕获异常去截图
十八、web自动化测试前置数据怎么准备?(*)
web 自动化测试数据需要的前置数据实现方式有很多,大体的原则就是尽量减少成本和复杂度。实际操作可以根据实现的难易程度采取以下措施:
1、手工提前准备好测试数据,比如登录过程中需要用到的测试账号。这种情况适合在自动化运行过程中不需要频繁修改的数据。
2、调用接口得到。当通过页面进行操作从而得到数据的成本比较高时,可以通过调用对应的接口得到数据。
3、直接操作数据库得到。如果调用接口不方便,也可以通过直接操作数据库的方式获取。
十九、selenium的工作原理(*)
selenium是按照client/server模式设计,client就是我们的测试代码,发送请求,server就是打开的浏览器。
selenium client 与浏览器驱动之间,走的是http通信协议,定义了一套json格式的webdriver通信协议。
二十、自动化测试在什么阶段执行会带来什么收益?(*)
前后端联调完成,做接口自动化测试
目的:防止后端的一个bug给前端带来多个bug,提高系统的稳定性、安全性、健壮性。
功能测试完成,产品稳定后,可以实施UI自动化测试,用于回归测试,提审效率,解放测试人员
二十一、Appium和Selenium的关系和区别
区别:
1、appium是用来实现移动端app的自动化测试,selenium是实现web网页自动化测试。
关系:
1、appium并没有重新造轮子,直接延用了selenium的底层通信协议标准,并在它的基础上增加了移动端自动化通信协议。
2、在代码层,继承了selenium中的webdriver
3、在元素定位上继承了selenium的定位类,并在它的基础上添加移动端的定位方法。
二十二、影响ui自动化测试脚本的稳定性因素有那些?(*)
1、测试环境,最好使用独立的测试环境,避免环境出错、或者数据丢失
2、网络,流畅的网络是操作更畅通,网络问题导致脚本报错
3、浏览器或者电脑卡顿,卡顿导致脚本报错
4、元素定位方式,使用xpath元素相对定位最好,不使用元素的动态表达式。
5、显性等待、隐形等待结合使用,提升效率。
二十三、如果一个元素无法定位,你一般会考虑那些方面的原因?(*)
1、元素定位表达式错误
2、不在指定的frame
3、没有加入显性等待和隐形等待
4、该元素是动态变化的
5、可能识别了元素,但是不能操作,比如不可用、不可写等。需要使用js先把前置的操作完成
6、不在指定的窗口中
二十四、po模式封装的原则有哪些?
数据层与代码层分离
业务逻辑与测试逻辑层分离
公共方法与业务方法分离
元素定位表达式和业务方法分离
二十五、xpath和css选择器什么区别?
css更加简洁,xpath相对会复杂一点
css解析速度更快
xpath支持的函数更多,功能更强大
css不支持text文本定位
二十六、请尽可能多的列出自动化的元素定位方式
find_element_by_xpath
find_element_by_id
find_element_by_name
find_element_by_class
find_element_by_tag_name
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_css_selector
二十七、当web自动化用例数量达到一定的数量后,如何去优化执行效率?(******)
同问:ui自动化测试有那些可以优化的地方?
1、将web自动化的用例分成若干个任务,使用多线程去执行,可以大大的减少运行时间。前提是,用例之间没有关联关系。
2、优化定位表达式,能使用css定位表达的尽量使用css,css元素定位的效率比xpath更快。
二十八、用例在运行过程中经常会出现不稳定的情况,也就是说这次可以通过,下次就没办法通过了,如何去提升用例的稳定性?(******)
1、总结引起用例失败的原因,可能是测试环境的问题、测试数据的问题
2、采用xpath的相对定位表达式,定位表达式不选择动态元素
3、采用显性等待、隐形等待
4、保证网络不卡、浏览器不卡
5、最好是在一个独立的测试环境中,避免出现环境出现问题
6、最好是独立的测试账号,避免数据出现问题
7、不要选择太复杂的测试逻辑,按照用户的正常操作去操作一个业务即可。
8、多线程执行用例的时候,减少用例的耦合度
9、多用try捕获,处理异常
10、测试数据、测试用例问题。
可以优化代码中的造数据方式,改成接口或者数据库等方式,快速稳定的造数据。
二十九、web自动化假设一个商品每个账号只能购买一次要怎么实现自动化(思维方式)
考察的是自动化当中,数据准备和数据清理。
在每次自动化的前置当中,重新创建一个用户账号,用这个新账号去购买商品
在自动化执行完成之后的后置当中,根据系统逻辑去删除当前用户的购买记录,恢复到自动化执行之前的状态。
三十、app自动化这部分,你用的什么框架?
app自动化,主要是使用了appium开源库,pytest测试框架,allure测试报告搭建的自动化框架,对app页面通用的操作封装成了basepage,加入了日志记录用例执行过程,和失败截图的功能。
三十一、selenium和appium有什么优势?
跨平台
跨语言
开源
劣势:
反应较慢
三十二、在编写UI自动化测试过程中有哪些地方是令你头疼的(******)
1、元素等位表达式,针对经常变化的元素
2、自动化测试是否稳定运行
三十三、po模式
每个页面为一个类,属性为页面元素定位表达式,方法为类的函数
三十四、在执行脚本自动化过程中,如何对象操作的元素进行高亮显示?
可以利用javaScript去修改当前元素的背景颜色来达到高亮的效果
三十五、selenium一般完成什么类型的测试,自动化覆盖率?(******)
冒烟测试和回归测试
回归测试主要是写一些功能稳定、容易实现的场景,节约测试时间
比如从打开浏览器操作一个完整业务,到关闭浏览器。
或者是比较繁琐的用例
核心业务的自动化覆盖率:100%
三十六、selenium是否支持桌面应用软件的自动化测试
Selenium不支持桌面软件的自动化测试,Selenium是根据网页元素的属性才能定位元素,而其他桌面软件自动化测试工具是根据桌面元素的位置来定位元素,当然现在也有根据桌面元素的属性来定位的
三十七、UI页面如果频繁变化,自动化如何处理?(*)
1、利用PO模式,将测试逻辑和业务逻辑分离
2、独立维护元素定位方式,把元素定位方式和页面操作隔离
三十八、selenium下拉菜单如何定位?
a、通过text文本查找
def select(el):
s=Select(el) #初始化Select对象
s.select_by_visible_text('kobe')
el=driver.find_element_by_xpath('//select[@id="faver"]')
b、通过value值查找
def select(el):
s=Select(el)
s.select_by_value('double')
el=driver.find_element_by_xpath('//select[@id="faver"]')
三十九、selenium三大切换指的是什么?
alert切换
窗口切换
iframe切换
四十、selenium如何判断元素是否存在?
方法一:
使用find_element,如果元素存在,不会触发异常;如果元素不存在,会触发异常。
方法二:
使用find_elements,该方法返回一个列表。判断长度,如果列表长度等于0,则没有找到元素;如果列表长度大于0,则表示元素存在。
四十一、移动端应用及其服务端的测试点?(*)
移动端:
权限、安装运行卸载、UI、功能、性能、中断、兼容性、安全性、回归、升级更新、用户体验
服务端:
接口测试、性能测试、安全测试、兼容性测试
四十二、PageObject是什么?
PageObject是页面对象,是ui自动化中一种设计模式,一般称为po模式,简单来说就是将页面封装成类,定义页面属性,功能。在测试代码中调用它,从而达到测试逻辑和页面逻辑解耦的效果,提高代码复用性,扩展性,便于维护。
四十三、鼠标悬浮操作
action=ActionChains(driver)
action.move_to_element(el)
action.perform()
四十四、app自动化用的是真机还是虚拟机?
在实际测试过程中都会用到
四十五、自动化测试有什么缺点?
1、不能完全取代手工测试,或者代价太大
2、提高效率会影响稳定性
四十六、selenium中,js如何操作隐藏元素?
selenium无法操作隐藏元素,但是能正常定位到,selenium也能提供了一个入口可以执行js脚本。
比如在python语言中,就是通过execute_script(js语句,参数)来执行js语句的。
js查找html元素常用的方法:
1、通过id查找html元素:document.getElementById(“id”);
2、通过标签查找html元素:document.getElementByTagName(“tagname”);
四十七、你如何模拟浏览器的前后移动
driver.back()
driver.forward()
四十八、获取当前页面的URL
driver.current_url
四十九、获取文本框中的文字
el=driver.find_element_by_xpath(元素定位表达式)
el.get_attribute(“value”)
五十、如何清除文本框中的内容
el=driver.find_element_by_xpath(元素定位表达式)
el.clear()
五十一:如何在webdriver中调用应用程序
driver.get(‘url’)
五十二、selenium是否支持用例的执行的引擎
Selenium是没有关于测试用例和测试套件管理和执行的模块。我们需要借助第三方单元测试框架来实现用例管理和用例的执行。例如Java中有Junit或者testNG,Python中有unittest单元测试框架。
五十三、selenium是否有读取excel文件的库?
没有,这里需要第三方工具,openpyxl
五十四、selenium有哪些组件?
selenium IDE:IDE只支持安装在火狐上的一个插件,支持录制自动化脚本
selenium webdriver:使用编程语言和webdriver编写自动化测试用例
selenium grid:分布式执行自动化脚本
五十五、selenium有什么限制或者缺陷
1、处理基于web的软件,selenium不支持桌面软件自动化测试
2、软件测试报告,和用例管理只能依赖于第三方插件,例如unittest、pytest
3、selenium入门门槛可能比较高,需要具备一定编程语言基础才能玩转
五十六、说下遇到过哪些常见的selenium异常?(*)
NoSuchElementException:没有该元素
TimeoutException:超时异常
ElementNotVisibleException:元素不可见异常
NoSuchAttributeException:没有这样的属性异常
NoSuchFrameException:没有iframe中
五十七、如何在webdriver中实现同步?
我可以使用隐式等待。
driver.implicitly_wait(秒);
如果执行驱动程序没有立即在页面中找到元素,它将自动等待,在指定的秒内找到元素了就自动往下执行。此代码将自动附加到脚本的每一行。每次都不需要写,打开浏览器后只需要编写一次。
五十八、如何判断一个页面上元素是否存在?
方法一:用try…except…
方法二:用elements定义一组元素方法,判断元素市场存在,存在返回True,不存在返回False
五十九、写UI自动化用例的步骤
1、声明driver对象(也就是你将要启动什么浏览器)
2、driver去打开浏览器,并输入你要测试的网页地址
3、找到你要操作的元素
4、对元素进行输入、点击、断言
5、关闭浏览器,释放资源
六十、如何设计一个高质量的UI自动化脚本?(******)
1、使用四种分层思想
即:业务逻辑和测试逻辑分离(po模式)
测试数据和测试脚本分离
业务方法和公共方法分离
业务方法和元素定位表达式分离
2、采用xpath的相对方法定位元素
3、采用显性等待加隐形等待的方式,提升效率
4、采用截图save_screeshop()方法,方便排除错误
5、采用allure报告,形象查看测试用例执行结果
6、采用钉钉+邮件的方式输出测试报告,方便其他人读取
7、采用主流程、核心业务、也可以是比较繁琐的操作进行脚本设计
8、最优先安装用户的操作从打开一个浏览器到操作一个完整的业务再到关闭浏览器,进行脚本设计。
9、减少用例的耦合度
10、减少不必要的操作,例如提前准备好数据,避免在脚本中调接口插件数据,影响脚本的稳定性
11、采用日志,如有报错,可以在日志中获取报错结果
12、如果用例之间没有关联,可以使用多线程进行执行用例
六十一、UI自动化跑的很慢,你有什么方法让它跑的快点?(******)
1、可以利用分布式的技术,将自动化分布在多台设备上同时执行;
2、检查代码中可以优化的部分,比如是否可以智能等待
3、有些前后置是否可以用接口或者数据操作去完成
六十二、selenium怎么保证操作元素的成功率?(******)
1、采用xpath的相对定位表达式
2、采用显性等待和隐形等待相结合的方式
3、保证网络的稳定
4、保证浏览器不要卡顿
5、需要在指定的frame和窗口中
6、需要在指定窗口句柄中
7、在对元素操作之前,比如click,如果该元素未display (非hidden),就需要先滚动到该元素,然后进行click操作;
8、被点击的元素一定要占一定的空间,因为selenium默认会去点击元素的中心点,不占空间的元素计算不出中心点;
9、被点击元素不能被其它元素遮挡;
10、判断元素是否可以被点击。
六十三、selenium中隐藏的元素能定位吗?
隐藏的元素通常会使用hidden属性或者通过css控制display=none等实现。这些元素在selenium中通常是不能直接定位的,只有当他们能在界面中可见时,才能被定位。
六十四、验证百度可以正常打开
from selenium import webdriver
driver=webdriver.Chrome()
driver.get('https://www.baidu.com')
title=driver.title
if title == '百度一下,你就知道':
print('success')
else:
print('fail')
driver.quit()
六十五、什么是断言和验证?
断言:测试将会在检查失败的时候停止,并不运行后续的检查。
可以直接了当的看到检查是否通过。缺点:校验失败后,后续检查不会执行。
验证:将不会终止测试。
六十六、DOM对象是什么?
DOM是文档对象模型,是操作页面的各种元素的一套接口,是一颗DOM树。
在DOM中,每一个元素看成一个节点,而每一个节点就是一个对象,也就是我们在操作元素时,把每一个元素节点看成一个对象,然后使用这个对象的属性和方法进行相关操作。
六十七、如何去定位页面上动态加载的元素?
首先触发动态事件,让元素加载出来,然后再进行定位
六十八、怎么保证测试质量(******)
1、提前进入项目,先熟悉需求,把不懂的地方标出来
2、测试用例的覆盖率,必须保证需求的100%覆盖
3、不同的测试类型的结合,功能,性能,兼容性等,增加测试覆盖面,确保测试质量
4、提前思考会影响到那些功能模块,能影响到的模块进行接口和UI自动化测试
5、接口测试用例准备精细,因为后端的一个bug可能会影响到前端n多个bug
6、上线前的回归测试、交叉测试
7、上线后的线上测试
8、利用UI自动化测试跑下主业务流程、以及按用户的操作来说,从登录开始到操作完一个业务,到最后的关闭页面整个流程跑自动化,让更多的人参与到逻辑比较复杂的业务中。
六十九、如果页面上获取不到元素怎么办?
1、确定元素表达式是否正确,采用xpath相对定位的表达式
2、元素是否在指定的frame中,切换到指定的frame
3、元素是动态变化的,避开动态元素定位方法,是在哪不行采用多个表达式,if条件判断,总会有一个符合要求