zl程序教程

您现在的位置是:首页 >  后端

当前栏目

2023备战金三银四,Python自动化软件测试面试宝典合集(十一)

Python自动化面试 2023 软件测试 合集 十一 宝典
2023-09-11 14:14:51 时间

马上就又到了程序员们躁动不安,蠢蠢欲动的季节~这不,金三银四已然到了家门口,元宵节一过后台就有不少人问我:

现在外边大厂面试都问啥

想去大厂又怕面试挂

面试应该怎么准备

测试开发前景如何

面试,一个程序员成长之路永恒绕不过的话题。每每到这个时期,不管当前有没有跳槽换工作需求的,都多少会跟着观望一下“外边的世界”~

当然外边的世界很精彩,但出来混,可不能没有一点准备,赤手空拳上阵。给大家分享一份免费的 测试工程师面试题,涵盖不少大厂高频必考点,需要的同学可免费领取。

不只是面试,了解市场需求,认识自己的问题,熟悉Python高频难点,巩固 Python相关知识...这份资料都可以帮助到你。

金三银四刚开始就拿到了蚂蚁的offer,这份阿里大牛总结的面试笔记,能掌握这份笔记的70%以上感觉就能拿大厂offer。

为了帮助更多的粉丝朋友们都拿到心仪的offer,小编在此把这份笔记分享出来

接上篇:

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)

滚动到顶部:77

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 输入图片的地址78

其实上传文件的按钮就是一个 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 隐式等待多秒内只要找到元素就开始执行,超多设定时间就超时79

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 定位的方式来进行定位元素80

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 random81

随机整数: 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')82

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.提取元素属性去断言:83

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 断言:

assertTitle(检查当前页面的 title 是否正确)

assertText(检查指定元素的文本)

assert Attribute(检查当前指定元素的属性的值)

如果该条件为真,他们将立即成功执行。如果该条件不为真,则将失败并暂停测试。直到超过当前所

设定的超过时间。一般跟 setTimeout 时间一起使用

11.44 assert-般断言哪些

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(value)

#获取登录按钮的属性 vaue 值是登录

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

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 en

abled==True,"元素不存在。不可用"

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

11.45 断言的目的是什么?

可以判断实际结果是否为预期结果,如果断言失败的话,会终止执行下面的程序,不用再用肉眼去看

去判断了是否有没有 bug 了