1、自动化代码中,用到了哪些设计模式?
单例设计模式
工厂模式
PO设计模式
数据驱动模式
面向接口编程设计模式
2、什么是断言( Assert) ?
断言Assert用于在代码中验证实际结果是不是符合预期结果,
如果测试用例执行失败会抛出异常并提供断言日志
3、什么是web自动化测试
Web自动化测试是从UI (用户界面)层面进行的自动化测试,
测试人员通过编程自动化程序(测试用例脚本)来打开浏览器测试网站的业务逻辑。
4、什么是Selenium?
Selenium是一个开源的web自动化测试框架,支持多种编程语言开发自动化测试脚本,支持跨浏览器平台进行测试
5、写出Selenium中你最熟悉的接口或类
WebDriver、InternetExplorerDriver、 FirefoxDriver、 ChromeDriver、 WebElement、WebDriverWait、 By
6、元素定位类型有哪些?
By类一共有8种元素定位方式,它们都是静态方法:
By.id():
By.name():
By.tagName():
By.className():
By.cssSelector():
By linkText():
By partialLinkText():
By.xpath():
7、Xpath是什么?
它是查找web页面元素的一种方式,相当于元素在dom中间的一个路径,可以采用绝对路径和相对路径的方式进行定位
它对于定义动态的页面元素有很大的帮助,同时也需要谨慎使用,因为如果页面结构发生变化,那么定位信息也可能需要变化。
8、findElement()和findElements(方法有什么区别
两个都是查找页面元素的方法
findElement():查找一个页面元素,只会返回一个WebElement对象
findElements() :查找页面上所有符合匹配的元素,返回元素集合
9、登录按钮除了用click方法进行点击以外还有其他方式吗?
还可以使用submit()方法,前提是input元素的type为submit
10、怎么提高Selenium脚本的执行速度
- 优化等待时间:使用 WebDriverWait 智能等待来代替线程等待 sleep 和 隐式等待 implicityWait
- 减少不必要的操作:如直接进入某页面代替经过一系列自动化操作进入某页面在服务器允许的情况下,使用多线程实现并发执行测试用例.
11、怎么对含有验证码的功能进行自动化测试的
1-图像识别,技术难度大,效果不佳,不推荐
2-屏蔽验证码,邀请开发处理,但在预生产环境或者生产环境不推荐
3-万能验证码,使用一个复杂的其他人无法猜到的验证码
12、怎么验证复选按钮是不是被选中
可以使用元素的 isSelected() 方法,如果返回的是 true 则说明被选中,否则表明未被选中
13、如何处理alert弹窗?
处理 alert 弹窗首先需要先跳转到 alert 上,然后在点击确定或者取消按钮,
Alert alert = driver.switchTo().alert(); //切换到alert
alert.accept0; //确定
alert.dismiss0; //取消
14、下拉菜单中如何去选择一个菜单项?
1-如果下拉菜单是select标签,使用方法: selectByValue() 或者 selectByIndex() 或者 selectByVisibleText() 即可
2-如果这个下拉菜单不是通过 select 标签创建,则直接通过 xpath 定位元素然后去点击选择
15、如何模拟浏览器的前进和后退、刷新操作
driver.navigate().back()://后退
driver. navigate().forward()://前进
driver.navigate0.refresh()://刷新
16、怎么获得当前页面的URL?
String url = driver.getCurrentUrl();
17、WebDriver的close()和quit(方法的区别是什么?
close()方法只是关闭当前正在操作的窗口
quit()是关闭了所有已经打开的窗口
18、你觉得自动化测试用哪些缺陷
成本比较大,而成效可能并不高
适合自动化测试的功能有限
某些功能操作相对复杂,比如验证码
维护成本高,一旦项目需求变更,自动化测试脚本和用例就需要改进
19、Web端功能自动化,如何实现(非input型上传)上传文件
与windows窗口进行交互,可以使用 pywin32库 实现。
20、遇到<d1 class="inf-bar clearfix"> 这种class中间有空格的控件,如何通过class定位?
xpath定位:直接//d1 [@class=“inf_bar clearfx”]
css定位: d1.inf_bar.clearfix
21、Selenium自动化,遇到 iframe 如何处理?
使用switch_ to.frame 切换进 iframe 当中后 ,再去定位其中的元素并操作
22、Web端功能自动化中,如何切换句柄。
先获取所有窗口句柄,然后使用 switch_ to.window() 切换到指定窗口
23、测试中遇到 readonly 属性的控件,需要如何处理?简述一下思路
先修改关闭 readonly 属性,然后再操作元素。
24、需求:给定一个只包含正整数且非空的数组,返回该数组中重复次数最多的前N个数字(返回结果按重复次数从多到少降序), 请用熟悉的语言实现该需求。10分钟内写出来
a = [1, 6, 7, 4, 4, 5, 4, 5, 4, 5, 5, 6, 7, 8, 5, 6, 7, 3, 4, 2, 2, 1, 4, 8, 9, 4, 5, 6]
def get_datas(a):
result = []
data_dict = {}
# 键值对:键:数字,值:在列表中的次数
for item in set(a):
data_dict[str(item)] = a.count(item)
print(data_dict)
# 将键值对按值(数字出现的次数)排序 ---从高到低排序
res = sorted(data_dict.values(),reverse=True)
print(res)
for num in res:
for key,value in data_dict.items():
# 如果值在列表中不存在,则添加到结果列表中
if num == value and key not in result:
result.append(key)
print(result)
# return result
a1 = get_datas(a)
执行结果:
{'1': 2, '2': 2, '3': 1, '4': 7, '5': 6, '6': 4, '7': 3, '8': 2, '9': 1}
[7, 6, 4, 3, 2, 2, 2, 1, 1]
['4', '5', '6', '7', '1', '2', '8', '3', '9']
25、例如: passwd={"admin'":"123321","user1":" 123456"}满足一下条件?
1、设计一个登陆程序,不同的用户名和对应密码存在一一个字典里面,输入正确的用户和密码去登陆,
2、首先输入用户名,如果用户名不存在或者为空,则一直提示输入正确的用户名
3、 当用户名正确的时候,提示去输入密码,如果密码跟用户名不对应,则提示密码错误请重新输入。
4、如果密码输入错误超过三次,中断程序运行。
5、当输入密码错误时,提示还有几次机会
6、用户名和密码都输入成功的时候, 提示登陆成功!
users = {"admin": "123456", "user1": " 123456"}
count = 0
def login():
global count
username = input("请输入用户名:")
if username == None or username == "":
login()
if username not in users.keys():
print("用户名输入不正确,请重新输入用户名:")
login()
while (count < 3):
passwd = input("请输入密码:")
if passwd == users[username]:
print("登录成功!!")
count = 3
else:
count += 1
print("密码输入错误,您还有{0}次机会。".format(3 - count))
login()
26、编写一个程序:(没懂)
1、能在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件;
2、并打印出相对路径。
import os
paths = []
def get_paths(dir, relate_dir=None, search_str=None):
global paths
if search_str == None:
return os.listdir(dir)
for item in os.listdir(dir):
if relate_dir == None:
relate_dir == os.curdir
if os.path.isfile(os.path.join(dir, item)):
if item.find(search_str) != -1:
paths.append(os.path.join(relate_dir, item))
elif os.path.isdir(os.path.join(dir, item)):
paths = get_paths(os.path.join(dir, item), os.path.join(relate_dir, item), search_str)
return paths
dir = os.getcwd()
search_str = "fun"
print(get_paths(dir, search_str=search_str))
# os.path.join()函数:连接两个或更多的路径名组件
# os.path.isfile() 功能:如果文件是一个存在的文件,返回True。否则返回False【有参】
# os.path.isdir()模块函数【常用】 功能:如果目录是一个存在的目录,则返回True。否则返回False【有参】
# os.getcwd()获取当前工作目录,即当前python脚本工作的目录路径【无参】
27、请写出下列代码的运行结果
def f(str1, *args, **kwargs):
print(str1, args, kwargs)
# *args表示任何多个无名参数,它本质是一个tuple;
# **kwargs表示关键字参数,它本质上是一个dict;
# 同时使用*args和**kwargs时,必须*args参数列要在**kwargs前。
l = [1, 2, 3]
t = [4, 5, 6]
d = {"a": 7, "b": 8, "c": 9}
f(1, 2)
f(1, 2, 3, "python")
f("python", l, d)
f("python", *t)
f("python", *l, **d)
f("python", q="winning", **d)
执行结果:
1 (2,) {}
1 (2, 3, 'python') {}
python ([1, 2, 3], {'a': 7, 'b': 8, 'c': 9}) {}
python (4, 5, 6) {}
python (1, 2, 3) {'a': 7, 'b': 8, 'c': 9}
python () {'q': 'winning', 'a': 7, 'b': 8, 'c': 9}
参考链接
https://blog.csdn.net/qdPython/article/details/108775488?utm_source=app