(每日一题)Web端功能自动化,如何实现(非input型上传)
1、自动化代码中,用到了哪些设计模式?
2、什么是断言( Assert) ?
3、什么是web自动化测试
4、什么是Selenium?
5、写出Selenium中你最熟悉的接口或类
<pre style="overflow: auto;overflow-wrap: break-word;font-family: "Courier New" !important;">import logging # Python日志包,用来记录日志 from selenium.webdriver.remote.webdriver import WebDriver # 通过向远程服务器发送命令来控制浏览器。此服务器应运行WebDriver wire协议 from selenium.webdriver.support.wait import WebDriverWait # 构造函数,以秒为单位获取WebDriver实例和超时。 from selenium.webdriver.support import expected_conditions as EC # 在webdriver中通常有用的“预期条件” import datetime # 日期时间 import time # “时间”模块的存根文件 import os # 获取文件路径 from selenium.webdriver.common.by import By # 支持的定位器策略集</pre>
6、元素定位类型有哪些?
By类一共有8种元素定位方式,它们都是静态方法:
7、Xpath是什么?
8、findElement()和findElements()方法有什么区别
9、登录按钮除了用 click 方法进行点击以外还有其他方式吗?
10、怎么提高Selenium脚本的执行速度
11、怎么对含有验证码的功能进行自动化测试的
12、怎么验证复选按钮是不是被选中
13、如何处理 alert 弹窗?
14、下拉菜单中如何去选择一个菜单项?
15、如何模拟浏览器的前进和后退、刷新操作
16、怎么获得当前页面的URL?
17、WebDriver 的 close() 和 quit() 方法的区别是什么?
18、你觉得自动化测试用哪些缺陷
19、Web 端功能自动化,如何实现(非input型上传)上传文件
这两个库:
import win32gui
import win32con
20、遇到 这种class中间有空格的控件,如何通过class定位?
21、Selenium自动化js动态生成table 合并列,遇到 iframe 如何处理?
iframe(译:哎服润么)切换,两种方式,七中方法
方式一:支持三种方法;switch_to.frame(切换方法)(译:思维吃.服润么)
方式二:更加稳定,支持四种
22、Web端功能自动化中,如何切换句柄。
23、测试中遇到 readonly 属性的控件,需要如何处理?简述一下思路
24、需求:给定一个只包含正整数且非空的数组,返回该数组中重复次数最多的前N个数字(返回结果按重复次数从多到少降序), 请用熟悉的语言实现该需求。10分钟内写出来
<pre style="overflow: auto;overflow-wrap: break-word;font-family: "Courier New" !important;">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) for num in res: for key,value in data_dict.items(): # 如果值在列表中不存在,则添加到结果列表中 if num == value and key not in result: result.append(key) return result a1 = get_datas(a)</pre>
执行结果:
25、例如: passwd={"admin'":"123321","user1":" 123456"} 满足一下条件?
<pre style="overflow: auto;overflow-wrap: break-word;font-family: "Courier New" !important;">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()</pre>
26、编写一个程序:---没弄懂
1、能在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件;
2、并打印出相对路径。
<pre style="overflow: auto;overflow-wrap: break-word;font-family: "Courier New" !important;">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))</pre>
27、请写出下列代码的运行结果
<pre style="overflow: auto;overflow-wrap: break-word;font-family: "Courier New" !important;">def f(str1, args, kwargs): print(str1, 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)</pre>
执行结果:
<pre style="overflow: auto;overflow-wrap: break-word;font-family: "Courier New" !important;">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}</pre>
28、请写下列代码的运行结果
<pre style="overflow: auto;overflow-wrap: break-word;font-family: "Courier New" !important;">import copy a = [1, 2, 3, 4, ["a", "b"]] b = a c = copy.copy(a) d = copy.copy(a) a.append(5) a[4].append("c") # 请根据以上规则填写一下输出内容 print('a=', b) print('b=', b) print('c=', c) print('d=', d)</pre>
执行结果:
<pre style="overflow: auto;overflow-wrap: break-word;font-family: "Courier New" !important;">a= [1, 2, 3, 4, ['a', 'b', 'c'], 5] b= [1, 2, 3, 4, ['a', 'b', 'c'], 5] c= [1, 2, 3, 4, ['a', 'b', 'c']] d= [1, 2, 3, 4, ['a', 'b', 'c']]</pre>
29、等长的两个列表合并到一个字典,要求:合并成{'A': 1, 'B': 2, 'C': 3},请用一行代码实现
<pre style="overflow: auto;overflow-wrap: break-word;font-family: "Courier New" !important;">keys = ["A", "B", "C"] values = ["1", "2", "3"] print(dict(zip(keys, [int(x) for x in values])))</pre>
30、合并两个列表并消除重复值
<pre style="overflow: auto;overflow-wrap: break-word;font-family: "Courier New" !important;">list_1 = ["a", "b", "c", "1", "A", "winning"] list_2 = ["a", "python", "string"] print(set(list_1 + list_2)) # 执行结果:{'c', 'winning', '1', 'string', 'b', 'a', 'python', 'A'}</pre>
31、已知一个列表,根据字典中的x ,由大到小排序这个列表
<pre style="overflow: auto;overflow-wrap: break-word;font-family: "Courier New" !important;">a = [{"x": 1, "y": 2}, {"x": 2, "y": 3}, {"x": 3, "y": 4}] aa1 = sorted(a, key=lambda item: item["x"], reverse=True) print(aa1) # 执行结果:[{'x': 3, 'y': 4}, {'x': 2, 'y': 3}, {'x': 1, 'y': 2}]</pre>
32、Html的基本结构是怎么样的,如何绘制一个2X2的表格
<pre style="overflow: auto;overflow-wrap: break-word;font-family: "Courier New" !important;"> 两行量列的表格 - - - - - </pre>
33、写出语句打印" let's go", she said
<pre style="overflow: auto;overflow-wrap: break-word;font-family: "Courier New" !important;">print(""let's go",she said")</pre>
34、请写一段代码,随机生成10个数并写入文件
<pre style="overflow: auto;overflow-wrap: break-word;font-family: "Courier New" !important;">import random fs = open("num.txt", "a") list1 = [] for index in range(10): num = random.randint(0, 10) list1.append(str(num)) print(list1) fs.write(",".join(list1)) fs.close()</pre>
执行结果:
35、请分别写出代码执行结果
<pre style="overflow: auto;overflow-wrap: break-word;font-family: "Courier New" !important;">a = 1 def fun(a): a = 2 fun(a) print(a) # 执行结果:1</pre>
===============
<pre style="overflow: auto;overflow-wrap: break-word;font-family: "Courier New" !important;">b = [] def fun(b): b.append(1) fun(b) print(b) 执行结果:[1]</pre>
36、自动化测试分为哪几类:AB
37、什么是会话?
38、什么是token?
Token 之所以可以用来做鉴权,原理如下:
39、你做接口自动化,项目用的是什么数据库, 用什么来操作的这个数据库
40、你用过单元测试框架吗js动态生成table 合并列,是什么框架,有哪些常用注解
常用注解:
41、说说你对接口的理解
41、做过接口测试吗,有哪些熟悉的工具。
熟悉的工具:
42、工具已经可以完成自动化测试了,为啥还要用到代码去完成?
43、请简单说一说get、post这 两种请求方法的区别?
Get :
a.一般对于从服务器取数据的请求可以设置为get方式
b.Get 方式在传递参数的时候,一般都会把参数直接拼接在url上(例如: )
c.Get 请求方法可以传递的参数数据量是有限的(因为一般参数是拼接在url上,而浏览器对于url的长度是有限制的)
d.Get 请求因为是直接将数据拼接在url上,所以安全性不如post强(相对) , 但是get的执行效率要快于post
Post :
a.一般往服务器提交数据的请求会设置为post方式
b.Post 方式传递参数一般都会把参数放在请求体,而不会拼接在url
c.Post 请求方法可以提交的数据量不受限制
d.Post 请求传参相对于 get 要安全(相对不是绝对) , 但是 post 的执行效率不如get。
44、简述你所知道的延时等待方式
强制等待:
隐式等待:
显式等待:
45、输出结果是什么?
<pre style="overflow: auto;overflow-wrap: break-word;font-family: "Courier New" !important;">def f(x, l=[]): for i in range(x): l.append(i * i) print(l) f(2) f(3, [3, 2, 1]) f(3) 结果: [0] [0, 1] [3, 2, 1, 0] [3, 2, 1, 0, 1] [3, 2, 1, 0, 1, 4] [0, 1, 0] [0, 1, 0, 1] [0, 1, 0, 1, 4]</pre>
46、你是怎么做接口自动化的?
47、如何用 webdriver 进行鼠标右键点击操作?
使用 ActionChains 类
ac= ActionChains(driver);
ac.context _click(元素对象).perform()
48、你在写自动化框架的时候,测试用例保存到哪里?用什么去读取?
49、用python写一段代码,计算1-1000以内能被7整除,除以5余3的整数,并按行打印
<pre style="overflow: auto;overflow-wrap: break-word;font-family: "Courier New" !important;">for i in range(1, 1000): if i % 7 == 0 and i % 5 ==3: print(i) 执行结果: 28 63 98 133 168 ........</pre>
50、小明有一百元,他想买一百本书,英语书5元一本,数学书3元一本,语文书0.5元一本,请问他有多少种买法。请编程解决这个问题,可以使用任何编程语言,包括伪语言。
根据题意是要买一百本书,一百块钱,看有多少种买法(钱不一定非要花完 ,只要能买到一百本书) :
三本书的价格分别为: 5,3,0.5,那么能买到最多的数学书为20本,英语书33本,语文书200本。但是也有组合的买法,所以可以通过一个三重for循环来实现, ijk分别代表购买数学,英语,语文书的数量,循环条件分别是i
发表评论
热门文章
Spimes主题专为博客、自媒体、资讯类的网站设计....
一款个人简历主题,可以简单搭建一下,具体也比较简单....
仿制主题,Typecho博客主题,昼夜双版设计,可....
用于作品展示、资源下载,行业垂直性网站、个人博客,....
尘集杂货铺和官网1t5-cn
11月11日
[已回复]
希望主题和播放器能支持SQLite数据库,AI能多个讯飞星火