selenium随笔

xpath定位

 

css样式定位

 

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

设置等待时间

方法1

import time

time.sleep(3)

方法2Webdriver对象有个方法叫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.自动化测试发现的缺陷数

每次回归测试时自动化测试发现的缺陷数及漏测数,反应了自动化用例的有效性

在开展自动化测试时遇到的一些问题

  1. 项目流程不规范、项目变动频繁导致自动化用例维护成本高---解决:深入理解用户需求,规范开发流程,自动化用例先覆盖已经稳定的功能
  2. 对自动化期望太高---自动化是一个逐步完善的过程,不可能一下子代替手工测试

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  :在当前点元素不可见
posted @ 2021-12-28 18:59  Alien0208  阅读(53)  评论(0)    收藏  举报