1、常用的元素定位有那几种方法,请举例说明
解答:常用的元素定位方法:
ID、NAME、CLASS NAME、TAG NAME、LINK TEXT、PARTIAL LINK TEXT、CSS、XPATH
2、单个元素定位与多个元素定位的区别是什么?
解答:单个元素定位返回的是一个元素,多个元素定位返回的是一个列表,通过列表的索引来定位。
3、如果是iFrame的框架,如何来定位里面的元素属性的对象
解答:通过id、name、索引来定位里面的元素属性的对象。
4、怎么理解页面对象设计模式,详细的阐述下每个目录具体的作用
页面对象设计模式也叫PO模式,是Page Object的简称,是一种设计思想,把一个页面当作一个对象。
工作中我们写的自动化测试用例会很多,那么代码多了维护起来就相应的比较复杂,那么页面对象设计
模式其实就是对代码进行优化。
它的优势具体为:
创建了跨测试用例的共享代码
减少了重复代码的数量
如果用户界面发生了变化,我们只想要维护一个地方,这样维护的成本相对就比较低了
base:基础层,主要编写的是底层元素封装
common:公共方法,把公共的方法分离到这个里面
utils:工具类,主要指的是操作有一些工具的类
page:对象层,主要指的是页面的每一个交互写成一个独立的方法
test:测试层,里面主要编写测试用例
data:把测试过程中的数据存储在这个目录下
report:测试报告,主要指的是存储生成的HTML的测试报告
5、怎么理解显式等待和隐式等待
解答:隐式等待,使用到的方法是implicitly_wait的方法,可以把它理解为设置最长等待时间。是设置的
全局等待,例如打开浏览器设置等待时间,是对页面中的所有元素设置加载时间。
显示等待,主要指得是程序每隔一段时间执行自定义的程序判断条件,如果判断成立,程序就会继续执
行,那么如果判断失败,就会抛出TimeOutExpection的异常信息。6、在测试中遇到多窗口,具体怎么解决,请描述具体的步骤和编写
具体的案例代码
1、先获取当前窗口句柄
2、然后点击链接,打开一个新的窗口句柄
3、然后获取到所有窗口的句柄
4、循环所有的窗口句柄,判断如果不是当前窗口,那么就是新的窗口
5、切换到新的窗口后,操作完成后,然后关闭新的窗口,再切换到当前窗口句柄
7、你写了多少个UI自动化测试用例?
解答:200个多
8、详细的描述下你理解的UI自动化测试流程?
解答:
自动化做的是系统的回归测试
(1)并不是所有的模块都可以进行UI自动化测试的,因此应当先梳理哪些模块可以做UI自动化测式;
(2) 梳理完成后,和相关的人(领导)建议核对下计划以及梳理的结果;
(3) 页面对象编写测试用例,跟相关的人员进行测试用例的评审,看测试的场景是否考虑周全,对其进行
相应的补充;
(4) 评审完成后,编写代码实现梳理的测试模块,编写完成后跟相关的人进行评审代码(断言是否合理,
代码编写是否合理);
(5) 一切都纠正完成后,整合到Jekins持续集成平台;
(6) 在下一次更新的时候,那么在下个版本中,只需要点击构建就能够自动化的执行。
driver=webdriver.Chrome()
driver.get("https://mail.sina.com.cn/")
nowHandler=driver.current_window_handle
t.sleep(3)
driver.find_element(By.LINK_TEXT,"注册").click()
t.sleep(3)
allHandlers=driver.window_handles
for handler in allHandlers:
if handler!=nowHandler:
driver.switch_to.window(handler)
driver.find_element(By.NAME,"email").send_keys("admin")
t.sleep(3)
driver.close()
t.sleep(2)
driver.switch_to.window(nowHandler)
driver.find_element(By.ID,"freename").send_keys("qwer")
t.sleep(3)
driver.close()9、你在UI自动化测试中具体使用到了哪些测试技术和工具
解答:python语言+selenium自动化测试工具+unittest框架 HTMLTestRunner库+页面对象设计模式思
想
10、你编写的UI自动化测试用例你发现过bug嘛?
解答:发现过。但是少,例如点击添加按钮后未弹出框,由于js的控件的原因,页面元素没有加载出
来,可以通过添加显示等待、强制等待、隐式等待解决。
11、测试报告你是怎么生成的?
解答: unittest框架 HTMLTestRunner库来生成测试报告。
12、结合sina邮箱编写UI的自动化测试用例
解答:
import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By
from parameterized.parameterized import parameterized,param
import time as t
class TestSina(unittest.TestCase):
def setUp(self) -> None:
self.driver=webdriver.Chrome()
self.driver.maximize_window()
self.driver.get("https://mail.sina.com.cn/#")
self.driver.implicitly_wait(30)
def tearDown(self) -> None:
self.driver.quit()
@parameterized.expand([
param("","","请输入邮箱名"),
param("asd123","234","您输入的邮箱名格式不正确"),
param("1398441211@sina.com","234","登录名或密码错误")
])
def test_username_password_error(self,username,password,result):
self.driver.find_element(By.ID,"freename").send_keys(username)
self.driver.find_element(By.ID,"freepassword").send_keys(password)
self.driver.find_element(By.CLASS_NAME,"loginBtn").click()
t.sleep(3)
divText=self.driver.find_element(By.XPATH,'/html/body/div[1]/div/div[2]/div/div/
div[4]/div[1]/div[1]/div[1]/span[1]')
t.sleep(3)
self.assertEqual(divText.text,result)
if __name__ == '__main__':
unittest.main()13、单元测试框架unittest常用的断言方法有哪些?
解答:assertEqual():比较的是两个对象==的关系;
assertIn():比较的是两个对象包含的关系;
assertIs():比较的是字符串的内存地址。
单元测试框架:
1、unittest与pytest的框架
2、unittest的常用组件有哪些
解答:测试用例:就是测试类里面编写的测试方法
测试固件:初始化和清理,使用到的方法分别是setUp()和tearDown()
测试套件:就是测试用例的集合,在一个测试套件中可以有很多的测试用例,它的英文单词是TestSuite
测试执行:TestRunner,执行测试套件或者测试用例
测试报告:TestReport,就是执行所有测试用例后的结果信息
3、unittest中怎么理解测试固件
解答:测试固件:一个或多个测试以及清理工作所需要的设置或准备
测试固件每次均执行:每执行一次测试用例,测试固件都会被执行到
4、怎么理解setUp(),tearDown()与类测试固件的测试
解答:setUp() and tearDown():在一个测试类里面,有多少个测试用例,它就会被执行多少次
setUpClass() and tearDownClass():是类方法,不管测试类里面有多少测试用例,它只会执行一次
5、在unittest测试框架中,加载所有的测试模块使用到的方法是什
么?具体参数是什么?
解答:TestLoader()类中的discover方法:
第一个参数start_dir是测试模块的路径,
第二个参数pattern通过正则方式加载所有测试模块6、在unittest中使用哪个库来生成对应的测试报告
解答:使用HTMLTestRunner库来生成测试报告。
7、一个完整的测试用例包含哪些步骤
解答:测试初始化、测试步骤、测试断言、测试清理
8、怎么理解参数化
解答:当一个测试场景,它的测试步骤相同,测试数据不一样的时候,那么就可以使用参数化的思想来
解决。
9、测试报告怎么生成?使用到那个库
解答:使用HTMLTestRunner库来生成测试报告。
10、自动化框架怎么写,是有模板还是自己写的
解答:自己写的,以UI自动化测试为例,引入PO设计模式对框架进行分层:有基础层、对象层、测试
层、数据层、公共层、工具层、数据层、报告层,基础层是对底层元素的封装,写的是单个元素定位和
多个元素定位的方法,对象层继承基础层,把每一个交互写成一个独立的方法,主要是元素的定位和页
面的操作,测试层继承对象层,编写的是测试用例,数据层存放的是测试过程中产生的数据,公共层主
要是把公共的方法分离出来,例如测试路径的获取,工具层编写的是操作工具的类,报告层存储生成的
HTML的测试报告。所以PO设计模式的优势是:可以创建跨多个测试用例的共享代码,减少重复代码如
果用户界面发生变化只需要在一个地方维护,降低维护成本。
11、你是如何做接口自动化的,用的工具于技术有哪些
解答:工具方面:
jmeter工具:在测试计划中添加线程组,在线程组中添加http信息管理器、http请求头和测试用例,则
是用例编写完成后,结合ant构建工具编写build.xml文件,然后在build.xml文件的路径下执行ant就可
以自动执行,最后整合到jekins的持续集成平台上,在下个版本迭代中只需要点击构建就行。
postman工具:以登录接口为例,首先创建集合,在集合中添加requests,然后填写请求头post、请求
方法、请求地址、请求参数,在tests中进行编写测试用例进行断言,然后执行集合,使用Newman生成
测试报告。
代码:
12、如何落地一个自动测试框架
解答:以UI自动化测试为例,引入PO设计模式对框架进行分层:有基础层、对象层、测试层、数据层、
公共层、工具层、数据层、报告层,基础层是对底层元素的封装,写的是单个元素定位和多个元素定位
的方法,对象层继承基础层,把每一个交互写成一个独立的方法,主要是元素的定位和页面的操作,测
试层继承对象层,编写的是测试用例,数据层存放的是测试过程中产生的数据,公共层主要是把公共的
方法分离出来,例如测试路径的获取,工具层编写的是操作工具的类,报告层存储生成的HTML的测试
报告。所以PO设计模式的优势是:可以创建跨多个测试用例的共享代码,减少重复代码如果用户界面发
生变化只需要在一个地方维护,降低维护成本。13、自动化框架是自己搭建嘛?具体是怎么搭建的?
解答:以UI自动化测试为例,引入PO设计模式对框架进行分层:有基础层、对象层、测试层、数据层、
公共层、工具层、数据层、报告层,基础层是对底层元素的封装,写的是单个元素定位和多个元素定位
的方法,对象层继承基础层,把每一个交互写成一个独立的方法,主要是元素的定位和页面的操作,测
试层继承对象层,编写的是测试用例,数据层存放的是测试过程中产生的数据,公共层主要是把公共的
方法分离出来,例如测试路径的获取,工具层编写的是操作工具的类,报告层存储生成的HTML的测试
报告。所以PO设计模式的优势是:可以创建跨多个测试用例的共享代码,减少重复代码如果用户界面发
生变化只需要在一个地方维护,降低维护成本。
1、工具环境
2. 依赖包
3. 工程目录
4. 脚本书写步骤
a ) 初始化代码
a) Python解释器
b) Pycharm编码工具
c) Web端:
d) 浏览器
e) 浏览器驱动程序
a) Selenium
b) pytest
c) pytest-html
a) base 基类python package
b) page PO封装python package
c) test 测试用例python package
d) data 数据文件Directory
e) report 测试报告Directory
f) log 日志文件Directory
g) screenshot 截图文件Directory
h) config.py 项目配置信息文件
i) utils.py 工具类文件b ) 一个测试用例脚本编写过程
![img]
c ) 引入数据驱动
![img]
d ) 引入日志![img]
e ) 生成测试报告
接口自动化框架搭建:
1、选择一门语言
语言我们选择Python。因为相比Java,更容易入门。
python是一门简单易学,容易理解的计算机编程语言。不仅有很多的学习书籍,还有很多的学习视频。
Python也早已经成为tiobe语言的No1。![img]
2、选择PyTest作为测试框架
PyTest是一个非常成熟的全功能的Python测试框架。官方文档详细介绍了它的特点
![img]
pytest框架使用5步骤
· 对失败断言语句会进行详细信息展示(无需记住self.assert*名称)
· 自动发现测试模块和功能
· 非常方便管理小型或参数化测试项目
· 可以开箱即用运行单元测试和测试套件
· 丰富的插件架构,超过 800 多个外部插件和蓬勃发展的社区3. 测试报告
执行完测试用例后,可以以HTML(网页)方式将执行结果生成报告。我们选择pytest-html。它是PyTest
框架生成HTML测试报告的插件。使用方便。
第一步安装:pip install pytest-html
第二步修改配置:addopts = -s --html=report/report.html
轻松搞定。
4. 代码仓库
代码管理肯定是首选git喽。Git 分布式版本控制系统,实现版本控制和多人协同。
5. 持续集成方案
#PyTest目录结构
apiTestFramework # 项目名称
├── api # 定义封装被测系统的接口
├── script # 定义测试用例脚本
├── data # 存放测试数据文件
├── report # 存放生成的测试报告
├── common # 存放通用工具类
├── config.py # 定义项目的配置信息
└── pytest.ini # pytest配置文件
# 常见的代码托管平台:
Github
国外的基于git实现在线代码托管的仓库(企业版收费)
官网:https://github.com/
Gitee
码云,是开源中国免费提供(企业版收费)
官网:https://gitee.com/
Gitlab
类似Github,一般用于企业内部搭建git私服Jenkins是基于Java开发的一种开源、跨平台的持续集成工具。他能够持续自动构建/测试软件项目,实现
监控定时执行的任务。
我们简单来说明一下jenkins的核心构建步骤。
1) 搭建Jenkins环境
2) 创建任务之后设置源码管理3) 输入构建命名![img]
4)设置定时构建
![img]
5)设置测试报告路径6)设置构建后发送邮件
![img]
7)构建并查看结果![img](htt
14、自动化框架整体使用了那些技术,逻辑是怎么流转的
以UI自动化测试为例,引入PO设计模式对框架进行分层:有基础层、对象层、测试层、数据层、公共
层、工具层、数据层、报告层,基础层是对底层元素的封装,写的是单个元素定位和多个元素定位的方
法,对象层继承基础层,把每一个交互写成一个独立的方法,主要是元素的定位和页面的操作,测试层
继承对象层,编写的是测试用例,数据层存放的是测试过程中产生的数据,公共层主要是把公共的方法
分离出来,例如测试路径的获取,工具层编写的是操作工具的类,报告层存储生成的HTML的测试报
告。所以PO设计模式的优势是:可以创建跨多个测试用例的共享代码,减少重复代码如果用户界面发生
变化只需要在一个地方维护,降低维护成本。自动化框架整体使用了selenium、unittest、pytest、
python、HTMLTestRunner、git、Jenkins。
15、自动化运行过程中会出现那些错误
解答:TimeoutException : 超时异常(网络资源没加载完)
页面元素属性发生变化(代码问题)
界面交互js出错。(产品的bug)
ElementNotSelectableException :元素不能选择异常
ElementNotVisibleException :元素不可见异常
NoSuchAttributeException :没有这样属性异常
NoSuchElementException:没有该元素异常
NoSuchFrameException :没有该frame异常
Element not visible at this point :在当前点元素不可见
NullPointerException:空指针异常16.你自动化测试报告怎么写的?
解答:
通过HTMLTestRunner的库来生成测试报告。
17、Python都有哪些库?
web自动化测试工具:selenium
框架:unittest\request\pytest
数据驱动:ymysql\pyyaml\csv
获取路径:os\time\datetime\random\hashlib
18、自动化测试用例注意事项
1、每个测试用例必须以test开头
2、每个测试用例必须有标题
3、每个测试用例都必须有断言
4、业务之间有关联关系,测试用例之间是独立的,没有依赖性
补充:
1、元素定位不准确的原因?
页面元素没有加载出来,可以添加显示等待、强制等待、隐式等待;
元素属性值不是唯一的;
元素可能嵌在Iframe中,此时需要切换到元素所在的Iframe
元素可能在新的Windows窗口,此时需要切换Windows
可能存在Alert弹窗,此时需要先关闭Alert窗口
可能元素信息在迭代中发生了变化,此时需要更改元素定位信息
可能元素无法通过selenium的api完成操作,此时可以尝试下使用JavaScript去操作元素
元素可能在WebView控件中(该项针对的APP项目),此时需要切换context
2、如何定位元素属性值是动态的?
我们可以选用该元素唯一的,不是动态的属性值来进行定位,或者使用xpath、css 来进行层次+属性的
方式定位
3、如何去定位页面上动态加载的元素?
首先触发动态事件,然后再定位。如果是动态菜单,则需要层级定位。——JS实现(对动态事件封装)4、如何检查自动化脚本的执行结果?
使用assertEqual()或者assertIn() 来添加断言
5、如何判断是脚本问题还是版本问题?
.表示用例通过;
E表示脚本出错;
F表示断言失败;
6、如何提高selenium的执行速度;
提高网速
少用sleep等待,多用显式等待和隐式等待;
7、用那个方法判断元素是否显示?
is_displayed()显示
8、css和xpath的区别?
语法不一样;
css相对快一点;
9、自动化脚本失败的原因?
1、测试环境不稳定;
2、开发修改修改代码未通知测试人员;
3、开发引入了新的问题;
10、什么项目适合做自动化测试?
适合做的项目:
1、项目周期长且相对稳定,不会频繁变更;
2、需要做频繁的冒烟测试;
3、研发和维护周期长,需要频繁执行回归测试;
4、需要进行大数据量的数据驱动测试;
5、项目通过手工测试无法实现,或者手工成本太高
不适合的项目:
1、项目周期短用例不会多次重复执行;
2、被测项目不稳定变化太频繁11、如何开展自动化测试?
1、选择合适的测试工具
2、定义自动化测试覆盖的范围
3、制定测试计划
4、自动化测试环境搭建
5、脚本开发
6、测试执行
7、测试脚本维护
12、制定测试计划是要考虑哪些点?
1、选择合适的测试工具或分析当前的工具是否适合新项目;
2、选择合适的自动化测试框架;
3、确定要做的自动化测试的范围,不做自动化测试的范围;
4、测试环境的准备与搭建;
5、指定一个粗略的脚本开发的时间表;
6、制定脚本执行的一些策略,如冒烟测试的频率,回归测试的时间点及频率等;
7、定义自动化测试的输出,比如脚本,测试数据,发现的缺陷,测试报告等。
13、webdrive启动常见的浏览器语句?
14、如何选中下拉列表中的下拉选项?
15、如何取消选中下拉列表中的下拉选项?
from selenium import webdirver
driver=webdriver.Chrome()
driver=webdriver.Firefox()
driver=webdriver.Ie()
#按索引定位
select_by_index(index)
#按value定位
select_by_value(value)
#按文本定位
select_by_visible_text(text)
deselect_by_index(index)
seselect_by_value(value)
deselect_by_vasible_text(text)16、selenium如何处理弹窗?
17、为了提高UI自动化用例执行的稳定性,你做了哪些工作
1、查找元素优先使用显示等待
2、定位元素尽量使用相对路径的xpath表达式
3、用例进行最大限度解耦,使得每条用例可以独立执行
4、每条用例执行结束后对测试场景进行还原,避免对其他用例造成影响
5、引入失败用例截图、失败用例重试机制
6、多用 try 捕捉,处理异常
18、UI自动化用例应该如何设计?
1、选取项目核心功能的用例
2、需要多次重复执行、繁琐的用例
3、需要大量手工测试执行时间的用例
19、说下quit()和close()的区别
close 是关闭driver当前聚焦的页面,而 quit 是关闭全部浏览器 tab 页面。close用于用例执行过程中关
闭某一个页面的操作,而quit用于测试执行结束后关闭整个浏览器的操作
20、Web自动化中存在哪三种切换
1、windows切换
2、IFrame切换
3、Alert窗口切换
21、你是如何设计UI自动化测试框架的。
设计理念:使用Maven构建工具管理项目,引入PO设计模式对框架进行分层(页面层、逻辑操作层、用
例层、基础层),将用例层的共性部分抽取到基础层的BaseTest用例基类,将页面层的共性部分抽取到
基础差的BasePage页面基类,使用dataProvider实现数据驱动,集成log4j日志框架、集成Allure报表、
添加一个listener层用于引入用例失败截图重试机制,提高用例稳定性、采用并行测试的方式提高用例执
行效率,最后通过GIT将代码集成到Jenkins,每天定时执行构建,执行结果通过邮件发送到项目组相关
人员。
from selenium.webdriver.common.alter import Alter
#确认
driver.switch_to.alter.accept()
#取消
driver.switch_to.alter.dismiss()
#在弹出框输入内容
driver.switch_to.alter.send_keys()22、简述下Java进行UI自动化过程中常见的异常
1、NoSuchElementException:元素没找到异常
2、NullPointerException:空指针异常
3、ElementNotVisibleException:元素不可见异常
4、TimeoutException:超时异常
23、Selenium的工作原理是什么?
在Selenium客户端使用Java、Python等语言编写操作指令,通过WebDriver启动各个浏览器对象,并使
用相应API对浏览器对象进行操作,WebDriver充当了个代理服务器的角色,然后浏览器对象将响应信息
回传到WebDriver,由WebDriver再回传到我们的客户端程序。
24、Selenium使用了什么协议?
底层使用的是HTTP协议
25、如何设计高质量自动化脚本
1.使用四层结构实现业务逻辑、脚本、数据分离。
2.使用PO设计模式,将一个页面用到的元素和操作步骤封装在一个页面类中。如果一个元素定位发生了
改变,我们只用修改这个页面的元素属性
3.对于页面类的方法,我们尽量从客户的正向逻辑去分析,方法中是一个独立场景,例如:登录到退
出,而且不要想着把所有的步骤都封装在一个方法中。
4 测试用例设计中,减少测试用例之间的耦合度。
26、你的自动化用例的执行策略是什么?
1.自动化测试用例是用来监控的。集成到jenkins,创建定时任务定时执行;
2.有些用例在产品上线前必须回归。jenkins上将任务绑定到开发的build任务上,触发执行;
3.有些用例不需要经常执行。jenkins创建一个任务,需要执行的时候人工构建即可。
27、什么是持续集成?
频繁的将代码集成到主干,持续性的进行项目的构架,以便能能够快速发现错误,防止分支大幅度偏离
主干
28、自动化测试的时候是不是需要连接数据库做数据校验?
UI自动化不需要
接口测试会需要
29、什么是断言和验证?
断言(assert):测试将会在检查失败时停止,并不运行后续的检查
优点:可以直截了当的看到检查是否通过
缺点:检查失败后,后续检查不会执行,无法收集那些检查结果状态
验证(vertify):将不会终止测试
缺点:你必须做更多的工作来检查测试结果:查看日志——>耗时多,所以更偏向于断言30、page object设置模式中,是否需要在page里定位的方法中加上
断言?
不需要,page页只做元素抓取和操作方法
31、page object设计模式中,如何实现页面的跳转?
初始化driver参数,Page类传driver参数
32、自动化测试用例从哪里来?
-手工用例中抽取
33、你觉得自动化测试最大的缺陷是什么?
-不稳定
-可靠性不强
-不易维护
-成本与收益
34、什么是分层测试?
1.数据层
2.接口层’
3.UI层
35、webdriver可以用来做接口测试吗?
不可以,webdriver是专门做web的UI自动化参数
36、Selenium中有哪些验证点?
Selenium主要有三种验证点 -
检查页面标题
检查某些文字
检查某些元素(文本框,下拉菜单,表等)
37、做自动化测试的目的?
a.用来回归 b.用来监控系统稳定性 c.提高工作效率
38、如何判断case是否通过?
断言,与预期结果比较
39、你项目中有多少case,通过率怎么样?
按实际回答,上千个,一般是70-80%左右,40、什么是web自动化
指的是从UI界面,也就是用户界面层面进行的自动化测试,测试人员通过编程自动化的程序也就是自动
化脚本实现打开界面,操作界面的业务逻辑
41、登录按钮除了click方法还有其他方式吗?
submit() ,前提是input元素的type 为submit
42、如何验证复选按钮是不是被选中
可以使用元素的is_selected()方法,如果返回的是true则说明被选中,否则表明未被选中
43、如何用webdriver进行鼠标右键点击操作
使用Actions 类
Actions actions = new Actions(driver)
actions.moveToElement(element).perform();
actions.contextClick.perform();
44、如何使用webdriver 执行拖拽 的操作
还是使用actions类
Actions actions = new Actions(driver)
WebElement element1 = driver.findElement(by);
WebElement element2 = driver.findElement(by);
actions.dragAndDrop(element1,element2)perform();
45.你如何模拟浏览器的前后移动?
driver.back();
driver.forward();
46.你如何获得当前页面的URL?
driver.current_url
47、如何从文本框中获取打字文本?
通过将arg作为值传递来使用getAttribute(“value”)方法。
String typedText = driver.findElement(By.xpath(“xpath of box”)).getAttribute(“value”));
48、你如何清除中文本框的内容?
使用clear()方法。
driver.findElement(By.xpath(“xpath of box”)).clear();
49、如何在webdriver中调用应用程序?
driver.get(“url”);50、如何获得页面的标题?
driver.title
51、WebElement是一个接口还是一个类?
接口
52、FirefoxDriver是类还是接口,它从哪里继承?
Ans- FirefoxDriver是一个类。它实现了WebDriver接口的所有方法。
53、在selenium自动化测试中,你一般完成什么类型的测试?
主要是冒烟测试和回归测试。回归测试主要写一些功能稳定,容易实现的场景,通过自动化手段去实
现,节约测试时间。
54、你是如何管理你的测试用例并执行?
采用面向对象的设计思想,将测试用例存放在test包下,然后通过main文件中导入HTMLTestRunner
库,使用TestLoader()类中的discover方法加载所有测试模块,执行所有的测试用例。
55、如何实现文件上传?
我们在web页面实现文件上传过程中,可以直接把文件在磁盘完整路径,通过sendKeys方法实现上传。
如果这种方法不能实现上传,我们就可能需要借助第三方工具,我用过一个第三方工具叫autoIT.
56、在Selenium中如何实现截图
driver.get_screenshot_as_file("photo.jpg")
57、在你做自动化过程中,遇到了什么问题吗?举例下
这个问题,不管是自动化还是任何工作,都会被问到。主要想知道你是如何解决问题的,从而推断你问
题分析和解决的能力。
当然有遇到问题和挑战,主要有以下几点:
频繁地变更UI,经常要修改页面对象里面代码
运行用例报错和处理,例如元素不可见,元素找不到这样异常
测试脚本复用,尽可能多代码复用
一些新框架产生的页面元素定位问题,例如ck编辑器,动态表格等
58、举例一下你遇到过哪些异常,在selenium自动化测试过程中
通过这个问题,大概知道你写过多少脚本。写脚本过程最常见的异常就是,这个元素无法找到。
常见的selenium有以下这些:
ElementNotSelectableException :元素不能选择异常
ElementNotVisibleException :元素不可见异常
NoSuchAttributeException :没有这样属性异常
NoSuchElementException:没有该元素异常
NoSuchFrameException :没有该frame异常
TimeoutException : 超时异常
Element not visible at this point :在当前点元素不可见NullPointerException:空指针异常