1、自动化代码中,用到了哪些设计模式?
-
单例设计模式
-
工厂模式
-
PO设计模式
-
数据驱动模式
-
面向接口编程设计模式
2、什么是断言( Assert) ?
-
断言 Assert 用于在代码中验证实际结果是不是符合预期结果,
-
如果测试用例执行失败会抛出异常并提供断言日志
3、什么是web自动化测试
-
Web自动化测试是从UI (用户界面)层面进行的自动化测试,
-
测试人员通过编程自动化程序(测试用例脚本)来打开浏览器测试网站的业务逻辑。
4、什么是Selenium?
-
Selenium是一个开源的web自动化测试框架,支持多种编程语言开发自动化测试脚本,支持跨浏览器平台进行测试
5、写出Selenium中你最熟悉的接口或类
-
WebDriver、InternetExplorerDriver、 FirefoxDriver、 ChromeDriver、 WebElement、WebDriverWait、 By
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 # 支持的定位器策略集
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、下拉菜单中如何去选择一个菜单项?
-
如果下拉菜单是 select 标签,使用方法:selectByValue() 或者 selectByIndex() 或者 selectByVisibleText() 即可
-
如果这个下拉菜单不是通过 select 标签创建,则直接通过 xpath 定位元素然后去点击选择
15、如何模拟浏览器的前进和后退、刷新操作
-
driver.navigate().back()://后退
-
driver. navigate().forward()://前进
-
driver.navigate0.efresh()://刷新
16、怎么获得当前页面的URL?
-
String url = driver.getCurrentUrl(); # (译:给特珂润特.URL)
17、WebDriver 的 close() 和 quit() 方法的区别是什么?
-
close() (译:可篓子)方法只是关闭当前正在操作的窗口
-
quit() :(译:快特)是关闭了所有已经打开的窗口
18、你觉得自动化测试用哪些缺陷
-
成本比较大,而成效可能并不高
-
适合自动化测试的功能有限
-
某些功能操作相对复杂,比如验证码
-
维护成本高,一旦项目需求变更,自动化测试脚本和用例就需要改进
19、Web 端功能自动化,如何实现(非input型上传)上传文件
-
如果是 input 类型,可以直接输入路径的,直接调 send_ keys (译:森德K子)输入路径
-
与 windows 窗口进行交互,,可以使用 pywin32 库,通过识别对话框句柄来实现。
这两个库:
-
import win32gui
-
import win32con
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 当中后 ,再去定位其中的元素并操作
iframe(译:哎服润么)切换,两种方式,七中方法
方式一:支持三种方法;switch_to.frame(切换方法) (译:思维吃.服润么)
-
-
切换三种方法切换:下标切换、name名字属性切换、webelement对象切换
-
方式二:更加稳定,支持四种
-
-
骚操作:EC条件 - 条件:等待iframe有效并切换到iframe当中。
-
EC(译:一科四盘课
-