金三银四软件测试面试如何回答面试问题才能拿捏面试官之【ui自动化测试篇】_面试问你是怎么做ui自动化的怎么回答

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

driver.get() #加载一个网页

元素定位的:

driver.find_element_by_id()

driver.find_element(By.xxx,’’)

frame跳转的:

driver.switch_to.frame()

driver.switch_to.parents_frame()

driver.switch_to.default_content()

窗口跳转:

driver.switch_to.window()

对话框的处理:

Driver_switch_to.alert

.accepto

.dismiss

.text

.send_keys()

执行js脚本的:

driver.execute_script(js)

Element类:

element.click()

element.submit()

element.send_keys()

element.clear()

element.text

element.get_attribute()

element.is_displayed()

element.find_element_by_xpath()

11.13 定位元素的8个方法是什么?

1、通过id定位

find_element_by_id()

2、通过name定位

find_element_by_name()

3、通过 class name定位

find_element_by_class_name()

4、通过css定位

find_element_by_css_selector()

5、通过link定位

find_element_by_link_text(‘文本’)没有空格一般a链接

6、通过 partial_link定位

find_element_by_partial_link_text(部分文本)–般有空格a链接

7、通过 xpath定位

find_element_by_xpath()

8、通过 tag_name定位

find_element_by_tag_name()

11.14 js定位的5个方法

js用到css定位

  1. driver.execute_script(“document.getElenmentByld().value=‘’;”)

  2. driver.execute_script(“document.getElenmentByName().value=‘’;”)

  3. driver.execute_script(“document.getElenmentsByClassName()[0].value=‘’;”)

  4. driver.execute_script(“document.getElenmentsByTagName()[0].value=‘’;”)

11.15 jQuery定位的方法

  1. driver.execute_script(“$(#id定位值)vaC”)")-输入值a()处也可以用cick()表示点击

  2. driver.execute_script(“$(name=name定位值va(”)输入值

  3. driver.execute_script(“$(cas定位值)va()”)输入值

  4. driver.execute_script(“$((class=]”).val().)

  5. driver. execute script (“SCIvalue= ]”).val()")

11.16 css定位的方法?

#通过样式 #id样式, .cass样式为多

  1. find_element_by_css_selector(“#id”)

  2. find_element_by_css_selector(“.classname定位值”)

#通过元素属性

  1. find_element_by_css_selector(“[name=name定位值]”)

Find_element_by_css_selector(“[class=定位值]”)

#样式,属性结合

find _element_by_css_selector(div#fanwe_msg_box>table>tbody>tr>td:nth-child(2)>div(@class=‘dialog-content’))

5.父子元素定位

Find_element_by_css_selector(div#fanwe msg box> table>tbody>tr> td:nth-child(2)

div:nth-child(2))

11.17 xpath定位的方法? xpath怎么写?

Xpath写法://*div[@id=’u1’]/a[7] #相对路径

Xpath写法:/html/boy/div[1l/div/div/divl3/a[7 #绝对路径

#先找父元素,结合属性

Find_element_by_xpath(//div(@id=u1"/a[@name=tj_login])

11.18 如何去定位下拉框

1、首先要导入一个包: from selenium.webdriver.support.select import Select

2、先给下拉框元素定位定义一个变量:a= diver.find_element_by_css_selector()

3、再通过根据下拉框的 value\visible_text\index去选择值

Select(a).select_by_value(‘’)–根据下拉框的vaue值去选取值

Select(a).select_by_visible_text(‘’)–根据下拉框的内容去选值

Select(a).select_by_index(‘’)–根据下拉框的下标去选。从0开始

11.19 如何去定位内嵌界面

1、定位元素的时候看到fame的需要进入内嵌

2、如果有内嵌有id或name值时直接进入内嵌 driver.switch_to.frame(id值或name值)

3、如果内嵌没有id或name值,先定义一个内嵌再进入:

a=driver.find_element_by_class_name(‘’)

driver.switch_to.frame(a)

4、如果有多层内嵌,要一层一层进入

5、记得退出内嵌: driver.switch_to_default_content()

6、driver.switch_to.parent_frame()—进入父级内嵌,调至上一级内嵌

11.20 如何在不同的网页之间切换

1.首先要获取多个界面的句柄

先通过定位元素几个界面:driver.find_element_by_id().click或者其他,获取一个界面打印一个:print (diver.window_handles)

然后获取几个界面的句柄,定义成一个变量:window_list= diver.window_handles()—以列表形式存在

2.通过界面句柄的下标进入不同的界面: driver.switch_to_window(window_list[O])

通过界面句柄的下标进入不同的界面,0表示第一个,下标-1代表最新的界面

注意:如果进入一个界面里面是内嵌,记得退出内嵌再进入另一个界面

11.21 如何去定位滚动条?滚动条怎么处理?

一般当我们西面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接操作的,会报元素不可见异常的。这时候需要借助滚动条来拖动屏幕,使被操作的元素显示在当前的屏幕上,selenium提供了一个操作js的方法: execute.script(),可以直接执行js的脚本,

滚动到底部:

Js=‘var q=document.getElementByld(‘id’)scrollTop=10000’

Driver.execute_script(js)

滚动到顶部:

js=‘var q=document.documentElementscrollTop=0’

driver.execute_script(js)

#把滚动条拉到指定位置

虽然用上面的方法可以解决拖动滚动条的位置问题,但是有时候无法确定我需要操作的元素在什么位置,有可能每次打开的页面不一样,元素所在的位置也不一样,这个时候我们可以先让页面直接跳到元素出现的位置,然后就可以操作了。

Target_element = driver.find_element_by_xpath(‘//*[@id=“4”]/h3/a’)

Driver.execute_script(“arguments[O].scrollIntoView();”,target_element)

11.22如何去模拟键盘与鼠标的操作?

模拟键盘:

1、要导入一个包 rom selenium. wedriver common keys import Keys

2、快捷键输入,通过 send_keys()方法可以来模拟键盘输入操作。

Send_keys(Keys.CONTROL,'a’) 全选(Ctrl+A)

Send_keys(Keys.CONTROL,‘C’) 复制(Ctrl+C)

Send_keys(Keys.CONTROL,’X’) 剪切(Ct+X)

Sen_ keys(Keys.CONTROL,’V’) 粘贴(Ctr+V)

Send_keys(Keys.ENTER) 回车键

Send_keys(Keys.BACK_SPACE) 删除键

Send_keys(Keys.SPACE) 空格键

Send_keys(Keys.TAB) 制表键

Send_keys(Keys.ESCAPE) 回退键

模拟鼠标:

语法:ActionChains(diver).鼠标操作动作操作的元素. Perform()

鼠标操作动作有:click()单击、context_click()右击、double_click()双击、

Move_to_element()鼠标悬停

1.先导入一个鼠标的包:from selenium.webdriver.common.action_chains import Action Chains

2.然后定位元素: driver.find_element_by_xpath()可以定义为一个变量aa

3.然后通过语法执行:Action Chains(driver).move_to_element(aa).perform()

11.23、如何去处理上传 Windows文件?

1.可直接赋值 send_keys输入图片的地址

其实上传文件的按钮就是一个input元素,只是它的type类型是file类型,

我们在处理这种上传文件的按钮的时候,可以直接通过普通定位方式去定位它,

再利用send_keys方法去输入图片的地址就可以了。

Load_file_element=driver.find_element_by_xpath(‘/html/body/div(8l/div(1)/div(2/div/div[3]/form/div/div/div/inpu’)

2.需要用到一个工具,Autolt工具

帮助我们识Windows控件信息利用Autolt生成一个操作Windows对话框的exe执行文件

然后在python代码中去调用这个可执行文件

这里需要用到os模块,利用 os.system去执行 windows的exe文件,

把exe文件的路径传入,并传入需要上传的图片的路径即可

Drver.fnd_ement_by_xpath(‘html/body/divoiv1/dw2]/div/div3form/dvd/di)cick()#点击浏览

time.sleep(1)

ossystem(C:\Users\Administrator\ Desktop\AA.exe D:\QQ.png)

11.24 如何去定位时间控件

1、首先js去定位元素,去除元素中的属性:js="$(‘’).removeAttr(要删除的属性)

2、然后执行js脚本: driver.execute.script(js)

3、然后输入时间日期

driver.find_element_by_xpath(//[@id=start time]").send keys("2018-12-29 10:55:55)#输入日期

11.25 弹出框的操作?

弹出框一般有三种:警告消息框,确认对话框,提示消息框

在selenium中提供了一个方法 switch_to.alert,跳转到对话框上面去对alert对话框进行操作的函数/法

Accept() #点击确定按钮

Dismiss() #点击取消按钮

Text #获取对话框上的文本信息

Send_keys() #输入内容

11.26 等待时间有哪三种,区别是什么?

1、sleep强制等待,要导入from time import sleep,必须等待那么多秒定位才执行

2、driver.implicitly_wait隐式等待多秒内只要找到元素就开始执行,超多设定时间就超时

3、Web DriverWaite(driver,20.1).until(lambdax.x.find_element_by_name()).send_keys()-首先需要导入一个包:fom selenium.webdriver.support.wait import WebDriverWait, driver 1s钟找一次元素,最多找20秒,一直发送请求,直到找到元素位置以后,进行下一步操作。

11.27 有没有修改过页面元素的属性,具体怎么修改?

有的,有时候我们会碰到一些元素不可见,这个时候selenium就无法对这些元素进行操作了。例如,下面的情况:页面主要通过“display.none”来控制整个下拉框不可见。这个时候如果直接操作这个下拉框,就会提示:我们需要通过 javaScript修改 display的值

具体修改方式如下:

js='document.queryselectorAll(‘select’)[1].style.display=“block”;’

driver.execute_script(js)

11.28 定位不到元素,你碰到过哪些?怎么解决的?

1、像页面加载延迟的问题,这个需要通过等待延迟的方式来处理。

2、不过有时候,页面加载完成,但是元素暂时还不可见,导致定位不成功

这个可以选择使用显示等待来处理,这里需要用到WebDriverWait类来实现

3、还有就是像内嵌网页的问题,需要使用 driver.switch_to.frame(name/index)这个函数来跳转到处理。

4、还有要注意多窗口问题,动态id问题等的问题,对于多窗口处理,可以使用

driver.switch_to.window()的方式来进行处理,而对于动态id的问题,需要注意的是有些id跟数字有关,可能会动态变化,可以使用xpath也可以使用css_select属性定位或者样

式定位,或者可以通过父元素来找元素,或者通过兄弟节点来找对应的元素。等等

5、还有要特别注意滚动条的问题,这里通过调用js代码来实现的,driver.execute_script(js)

6、再这就是有时候会碰到某些元素的是不可见的,比如display属性为none这就需要通过 java Script修改 display的值。

js ='document. querySelectorAll(“select”)[1]. style. display=“block”;

driver.execute_script(js)

11.29 元素定位,有时候定位得到,有时候定位不到,可能是什么原因,你会怎么处理?

1、可能是网络问题,导致页面加载延迟,这个可以做延迟等待,一般选择隐式等待,在脚本前面加上driver.implicitly_wait(20)。

2、也有可能是页面结构发生变化导致的,这个时候最好选择通过 xpath或css结合属性进行或者样式定位可能会好点,或者采用JQuery定位的方式来进行定位元素

11.30 对于不可见/隐藏的元素,你如何定位,如何处理?

我们可以通过javaScript 修改 display的值,来实现

#修改元素的属性

#我们需要通过 javaScript修改 display的值。

js='document.querySelectorAll(‘select’)[1].style.display=“block”;’

driver.execute_script(js)

11.31 如果元素经常变动你怎么做?

1,少用绝对路径,多用css或者jQuery定位

2,单个元素属性进行封装

11.32 自动化如何破解验证码

1,开发去掉验证码

2,开发设定一个万能验证码

3,python导入 pillow和OCR模块 pytesseract

11.33 数据驱动有没有了解过,具体怎么做的?

1、其实就是把数据与脚本分离,好处就是方便维护管理,后期数据有变动,只要改 excel

表的数据就可以,脚本不用动

2、封装一个读取 excel表格的函数方法,调用这个函数来读取数据。

3、然后利用ddt模型,使用dt内部装饰器来实现数据引用

我们当时就是这么做的。

11.34 参数化的类型有哪些?自动化脚本如何实现数据的参数化?

把测试数据,通过变量或者文件进行保存,通过修改文件或者变量,达到数据参数化目的

测试过程,减低数据维护成本

1、像测试用例数据这块,我们都是放在 excel表格中的

2、常用的变化比较小的配置数据,比如数据库连接的配置,报告的路径,用例的路径等等

这些放在config配置文件中,利用全局变量来管理的。对于全局变量的数据,直接导入config某块,调用就可以。目的是以便于测试数据改变时,直接修改变量就行了

11.35 随机数如何操作?

1.首先都要 import random

随机整数:random randint(10002000),有时需要转化成字符串类型:

str(random randint(1000, 2000))

随机字符串:"join( random.sample(‘abcdefghijk’6)),有时前面固定字母了:

‘ldh’+".join(random sample(‘abcdefghijk’,6))

11.36 自动化中如何去操作excel表格?

需要用到xlrd库,调用这个库中的API函数来实现的。

1.第一步:导包 import xlrd

2.第二步:book= xrd.open_workbook(文件路径)

3.第三步:table= book.sheet_by_name表名)

4.第四步:读某行数据一般都技行来读取

Table.row_values(x)

如果要读全部的数据,多行数据,利用循环读取就可以

List=[]

for i in range(1,table.nrows):

List.append(table.row_values(i))

return list

11.37 如何去读取表格中一行,一列数据,具体数据

1、读取一行数据:YS.row_values(0)0表示第一行

2、读取一列数据:YS.col_values(0)0表示第一行

读取具体某个数据:YS.row_values(O)[0]–表示获取第一行第一列

11.38 如何读取表格中总的列数跟行数

获取总列数:YS.ncols

获取总行数:YS.nrows

11.39 自动化中如何去操作数据库

需要自己封装一个函数

1、安装 pymysql: pip install pymysql或者在 pycharm里面安装 pymysql

2、导入 mysql: import pymysql

3、连接数据库: db_connect= pymysql.connect(host=‘ip地址’,

user=’root’,password=’’,database=’’,port=’’,charset=‘utf8’)

4、建立游标: cursor= db_connect.cursor()

5、执行游标: cursor.execute(sql)

6、获取数据

获取游标中所有数据:all= cursor.fetchall()

获取游标中多条数据:many= cursor.Fetchmany()

获取游标中第一条所有数据:one= cursor.fenchone()

7、关闭游标: cursor.close()

8、关闭数据库连接 db_connect.close()

11.40 如何获取数据库返回的所有,一行,前5行

获取游标中多条数据:many= cursor.fetchmany(5)

获取游标中第一条所有数据:one= cursor.fenchone()

首先已经建立好了数据库连接的函数,并且return了

11.41 数据库返回的数据格式是什么类型的格式

二维元组的格式

如果要获取具体某个值要用:cursor.fetchall[0][0]—这个表示提取游标中所有值里面的第一个元祖里面的第一个值

11.42 ui自动化你是怎么做断言的?

断言主要检查几个点:

1.页面跳转是否正确(title,url)

2.页面数据是否正确(核心数据,页面上的关键信息,或者页面上的某个元素是否出现)

3.如果要检查数据库,需要连接数据库,查询数据,与预期结果进行对比

基本都调用unittest框架中提供的断言函数来实现的,用得比较多的就是

AssertEqual

Assertln

#扩展

1.提取元素text断言

User_text= driver.find_element_by_css_selector(“# j_account>a”).text#获取实际的值(展示账户名内容)

assert’ admin’ in user_text #断言 admin在实际值里

2.提取元素属性去断言:

login_button_value=driver.find_element_by_id(“lajax-login-submit”).get_attribute(“vaue”) #获取登录按钮的属性vaue值是登录

assert’登录’== login_button_value #断言登录是这个按钮的属性

3.提取界面title值去断言

assert"p2p信贷一最大、最安全的网络借贷平台"in driver.title,"失败"或者in改为 not in

4.提取元素是否可用来进行断言

Assert driver.find_element_by_css_selector(“div.user_money > a:nth-child(1)”).is enabled0==True,“元素不存在。不可用”

5.数据库断言,去数据库查询结果,是否跟预期一致

11.43 断言有哪几种(三种),常见 assert断言

selenium提供了三种模式的断言: assert、verify、waitfor

Assert失败时,该测试将终止。

Verify失败时,该测试将继续执行,并将错误记入日显示屏。也就是说允许此单个验证通过。确保应用程序在正确的页面上。

Waitfor用于等待某些条件变为真。可用于AJAX应用程序的测试

常见的assert断言:

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

取界面title值去断言

assert"p2p信贷一最大、最安全的网络借贷平台"in driver.title,"失败"或者in改为 not in

4.提取元素是否可用来进行断言

Assert driver.find_element_by_css_selector(“div.user_money > a:nth-child(1)”).is enabled0==True,“元素不存在。不可用”

5.数据库断言,去数据库查询结果,是否跟预期一致

11.43 断言有哪几种(三种),常见 assert断言

selenium提供了三种模式的断言: assert、verify、waitfor

Assert失败时,该测试将终止。

Verify失败时,该测试将继续执行,并将错误记入日显示屏。也就是说允许此单个验证通过。确保应用程序在正确的页面上。

Waitfor用于等待某些条件变为真。可用于AJAX应用程序的测试

常见的assert断言:

[外链图片转存中…(img-mA7iTJu1-1715631234388)]
[外链图片转存中…(img-DM1MZp2W-1715631234389)]
[外链图片转存中…(img-ArjgDV0w-1715631234389)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值