selenium随笔
xpath定位



css样式定位



查找元素方法 by id by className by tagName

设置等待时间
方法1
import time
time.sleep(3)
方法2:Webdriver对象有个方法叫implicitly_wait
wd=webdriver.Chrome
wd.implicitly_wait(5) #后续代码中所有选择元素的操作都会执
获取属性的值
- element.get_attribute(‘class’)
- 获取整个元素对应的HTML文本内容,可以使用element.get_attribute(‘outerHTML’)
- 只想获取某个元素内部的HTML文本内容,可以使用element.get_attribute(‘innerHTML’)
- 获取输入框里面的文字,可以使用element.get_attribute(‘value’)
- 获取元素文本内容,可以通过WebElement对象的text属性,可以获取元素展示在界面上的文本内容。有时候元素的文本没有展示在界面上或没有完全展示在界面上,可以尝试使用element.get_attribute(‘innerText’),或者element.get_attribute(‘textContent’)
frame切换切换(一个网页里)
在我们使用selenium打开一个网页时,我们的操作范围缺省是当前的html,并不包含被嵌入的html文档里的内容。
如果我们要操作被嵌入的html文档中的元素,就必须切换操作范围到被嵌入的文档中。
- 使用WebDriver对象的switch_to属性,像这样Wd.switch_to.frame(frame_reference)
- 其中frame_reference可以是frame元素的属性name(innerFrame)或者id(frame1).
- 切换到新的frame,比如wd.switch_to.frame(‘frame1’)或者wd.switch_to.frame(‘innerFrame’)
- 切换回去:wd.switch_to.default_content()
浏览器窗口切换(不同网页里)
切换到新的窗口里操作,可以使用WebDriver对象的switch_to属性的window方法
比如wd.switch_to.window(handle),Handle就是对应网页窗口的一个id。
WebDriver对象有window_handles属性,这是一个列表对象,里面包含了当前浏览器里面所有的窗口句柄。
代码如下
for handle in window_handles: #先切换到该窗口 wd.switch_to.window(handle) #wd.title得到该窗口的标题栏字符串,判断是不是我们要操作的那个窗口 If “必应” in wd.title: #如果是,那么这时候跳出循环,此时的WebDriver对象就是对应的该窗口 break;
#mainWindow变量保存当前窗口的句柄
mainWindow=wd.current_window_handle
切换到新窗口并且操作完之后,可以通过前面保存的老窗口句柄,将driver对应的对象直接返回到原窗口
wd.switch_to.window(mainWindow)
radio框

代码如下
#获取当前选中的元素 element=wd.find_element_by_css_selector(‘#s_radio input[checked=”checked”]’) print(‘当前选中的是:’+element.get_attribute(‘value’)) #点选小雷老师 wd.find_element_by_css_selector(‘#s_radio input[value=”小雷老师”]’).click() print(‘现在选中的是:’+element.get_attribute(‘value’))
checkbox框

代码如下
#先把已经选中的选项全部点击一下 elements=wd.find_elements_by_css_selector(‘#s_checkbox input[checked=”checked”]’) for element in elements: element.click() #点击小雷老师 wd.find_element_by_css_selector(‘#s_checkbox input[value=”小雷老师”]’).click()
selector框




selenium之 玩转鼠标键盘操作(ActionChains)
- click(on_element=None) ——单击鼠标左键
- click_and_hold(on_element=None) ——点击鼠标左键,不松开
- context_click(on_element=None) ——点击鼠标右键
- double_click(on_element=None) ——双击鼠标左键
- drag_and_drop(source, target) ——拖拽到某个元素然后松开
- drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某个坐标然后松开
- key_down(value, element=None) ——按下某个键盘上的键
- key_up(value, element=None) ——松开某个键
- move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标
- move_to_element(to_element) ——鼠标移动到某个元素
- move_to_element_with_offset(to_element, xoffset, yoffset) ——移动到距某个元素(左上角坐标)多少距离的位置
- perform() ——执行链中的所有动作
- release(on_element=None) ——在某个元素位置松开鼠标左键
- send_keys(*keys_to_send) ——发送某个键到当前焦点的元素
- send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素

冻住界面

冻住界面是在F12->Console里实现

之后再在Element界面定位元素
浏览器三种原生的弹出框








什么是自动化测试?自动化测试的优势是什么?
广义上讲,通过工具或者代码取代手动测试就是自动化测试。
自动化测试优势有:
- 1.减少回归测试成本
- 2.提高测试反馈速度
- 3.提高测试覆盖率
- 4.释放测试人员做其他更有意义的测试
什么样的项目适合做自动化?什么样的项目不适合做自动化?
适合做自动化的项目:
- 项目周期时间长且相对稳定
- 需要频繁做冒烟以及回归测试
- 需要进行大数据量的数据驱动测试
不适合做的项目:
- 项目周期短,用例不会多次重复执行
- 被测项目不稳定变化太频繁
你们公司开展自动化测试工作的主要流程是怎么样的?
- 选择合适的自动化工具
- 定义自动化测试覆盖的范围
- 制定测试计划
- 自动化测试环境搭建
- 脚本开发
- 测试执行
- 测试脚本维护
在制定自动化测试计划时一般要考虑哪些点?
- 选择合适的测试工具或者分析当前的工具是否适合新项目
- 选择合适的自动化测试框架
- 确定要做自动化测试的范围和不做自动化测试的范围
- 测试环境的准备与搭建
- 制定一个粗略的脚本开发时间表
- 制定脚本执行的一些策略,如冒烟测试的频率,回归测试的时间点及频率等。
- 定义自动化测试的输出,如脚本,测试数据,问题缺陷,测试报告等
一般一天写多少个自动化测试脚本?
- 取决于测试用例场景的复杂度,一般一天15-30条测试用例,复杂的话,有时一天只能写一条。
做自动化测试时关注的一些指标?
1.自动化测试用例的覆盖率:
=自动化测试用例数/所有用例总数
这个比例越高测试反馈也快,成本节约越多
2.节省的时间成本:
=手工测试所花的时间-自动化测试所花的时间
3.自动化测试的投入:
开发脚本的投入+维护脚本的投入+工具价格(商业工具)
4.自动化测试发现的缺陷数
每次回归测试时自动化测试发现的缺陷数及漏测数,反应了自动化用例的有效性
在开展自动化测试时遇到的一些问题
- 项目流程不规范、项目变动频繁导致自动化用例维护成本高---解决:深入理解用户需求,规范开发流程,自动化用例先覆盖已经稳定的功能
- 对自动化期望太高---自动化是一个逐步完善的过程,不可能一下子代替手工测试
selenium驱动浏览器使用的是什么协议
JsonWireProtocol
selenium中定位网页元素有几种方式
- id
- name
- classname
- linktext
- partialLinkText
- TagName
- Xpath
- Css Selector
如何判断一个元素在页面上是显示出来的
- 使用WebElement类中的isDisplayed()方法
如何选中下拉列表中的下拉选项
- 需要引入Select类,引入后有三种方式可以选择:selectByVisibleText,selectByValue,selectByIndex
selenium如何处理web弹窗,javascript弹窗
- 需要使用driver.switchTo().alert(); alert.accept(),相当于点击弹窗OK按钮,alert.dismiss(),相当于点击弹窗Cancel按钮
selenium可以处理windows弹窗吗
- 不可以,可以借助autoIt工具完成
selenium中常用的时间等待有哪几种
- Thread.sleep()-强制固定等待,用于脚本调试,我们需要强制设置线程等待,Thread.sleep(2000),driver这个实例,就是当前的线程。
- Implicit Wait()-用于全局的隐式等待,是隐式等待,一般在查找元素的时候使用。例如,我设置一个查找元素最大时间为10秒,使用了
imlicitlyWait后,如果第一次没有找到元素,会在10秒之内不断循环去找元素,知道超过10秒,报超时错误。 - Explicit Wait()-等待具体某个元素某个状态的显示等待,这个是显式等待,就是不管如何都是要等10秒,如果你设置了10秒超时,这个是selenium2的功能
在selenium3中,我暂时没有找到这个接口。
driver.close()和driver.quit()的区别
- close关闭的是当前页面,quit关闭的是浏览器
Selenium有哪些组件?(了解就好)
- 最早的有Selenium IDE,IDE只支持安装在fiefox上一个插件,支持录制自动化脚本。还有
- remote RC,和Grid 和webdriver。我们一般最重要的就是使用webdriver。
- Selenium Grid:负责运行脚本,支持多机器不同环境之间运行相同的用例,提升测试效率。
- Selenium RC:分为Client和Server端,Client负责编写测试脚本,用来控制Server库。Server负责控制浏览器的行为。Server主要包含三部分:Launcher、Http Proxy和Core。Core是被嵌入到浏览器页面中的,通过一堆javascript函数就,就可以实现对浏览器的操作。Launcher不明思议就是用来启动浏览器,把core加载到浏览器页面中,并把浏览器的代理设置为Selenium Server的 Http Proxy.
Selenium的原理
- selenium需要webdriver来驱动浏览器,先将webdriver加入到环境变量中,
测试脚本运行之后webdriver会在本地生成一个通信监听端口,当我们的测试代码发起请求命令后,webdriver会监听到这些发送请求,解析这些代码后发送到浏览器上执行。
举例一下你遇到过那些异常,在selenium自动化测试过程中
常见的selenium有以下这些:
- ElementNotSelectableException :元素不能选择异常
- ElementNotVisibleException :元素不可见异常
- NoSuchAttributeException :没有这样属性异常
- NoSuchElementException:没有该元素异常
- NoSuchFrameException :没有该frame异常
- TimeoutException : 超时异常
- Element not visible at this point :在当前点元素不可见
浙公网安备 33010602011771号