一、Selenium IDE 安装
- 安装Chrome浏览器
- 应用商店下载 Selenium IDE
二、Selenium IDE 功能界面与工具栏使用
-
Selenium IDE 功能界面见图一:
图一
三、Selenium IDE 脚本录制(再简单的自动化中可用,但是对于长期、稳定的和复杂的自动化项目来讲,不太适合使用录制的方式)
-
录制脚本,步骤如下(以录制百度为例):
图二
1.1 输入百度连接:https://www.baidu.com
1.2 点击录制按钮,开始录制
1.3 点击百度首页“新闻”连接,后续点击国内,再点击国际
1.4 点击录制按钮,结束录制
1.5 点击执行用例按钮,进行脚本回放
1.6 脚本执行成功后,操作步骤处,会变成绿色。同时会出现Runs:成功总数;Failures:失败总数
-
增强脚本(以点击“即时新闻”超链接为例)
2.1 添加assertText要素到之前到录制脚本中,如图三箭头所示,添加的Command是“assertText”;target是“linkText=即时新闻”;value是“即时新闻”。说明此时的检查点设置是检查页面“即时新闻”字符串。如果有则检查通过,脚本继续执行,如果没有,则检查未通过,脚本停止执行。
如图三所示执行日志显示,脚本执行和检查点检查都失败了。
因为“即时新闻”是国际Tab页才会有的,在“新闻”首页找不到这个元素,所以执行失败了
图三 -
断言模式介绍
3.1 常见的三种模式的断言:assert、verify、waitfor
断言和验证的根本区别:验证失败后程序会继续执行,但是断言失败后将停止脚本的执行
assert(断言):失败时测试终止
verify(验证):失败时,测试继续执行,将错误记入日志显示屏
waitfor:用于等待某些条件变为真,可用于AJAX应用程序测试
3.2 三种模式常用的具体命令
assertLocation:判断当前是在正确的页面
assertTitle:检查当前页面的 title 是否正确
assertValue:检查 input 的值, checkbox 或 radio,有值为”on”无为”off”
assertSelecteted:检查 select 的下拉菜单中选中是否正确
assertSelectedOptions:检查下拉菜单中的选项的是否正确
assertText:检查指定元素的文本
assertTextPresent:检查在当前给用户显示的页面上是否有出现指定的文本
assertTextNotPresent:检查在当前给用户显示的页面上是否没有出现指定的文本
assertAttribute:检查当前指定元素的属性的值
assertTable:检查 table 里的某个 cell 中的值
assertEditable:检查指定的 input 是否可以编辑
assertNotEditable:检查指定的 input 是否不可以编辑
assertAlert:检查是否有产生带指定 message 的 alert 对话框
verifyTitle:检查预期的页面标题
verifyTextPresent:验证预期的文本是否在页面上的某个位置
verifyElementPresent:验证预期的UI元素,它的HTML标签的定义,是否在当前网页上
verifyText:核实预期的文本和相应的HTML标签是否都存在于页面上
verifyTable:验证表的预期内容
waitForPageToLoad:暂停执行,直到预期的新的页面加载
waitForElementPresent:等待检验某元素的存在。为真时,则执行
3.4 异常类型
AssertionError:assert语句失败
AttributeError:试图访问一个对象没有的属性
IOError:输入输出异常,基本是无法打开文件
ImportError:无法引入模块或者包,基本是路径问题
IndentationError:语法错误,代码没有正确的对齐
IndexError:下标索引超出序列边界
KeyError:试图访问字典里不存在的键
KeyboadrInterrupt:Ctrl+c被按下
NameError:使用一个还未赋值对象的变量
SyntaxError:python代码逻辑语法错误,不能执行
TypeError:传入的对象类型与要求不符
UnboundLocalError:试图访问一个还未设置的全局变量,基本上是由于另有一个同名的全局变量,导致你以为在访问
ValueError:传入一个不被期望的值,即使类型正确
- stortTitle命令和echo命令
- storeTitle:将网页的title属性值存储到指定变量中
- echo:控制台打印输出
使用示例(以打开百度为例):
4.1 URL中输入https://www.baidu.com,然后按“enter”键
4.2 设置 Selenium IDE 为录制状态,录制完成。
4.3 添加命令“sortTitle”、“echo”
4.4 执行脚本,查看日志
图四
-
从 Selenium IDE 中导出脚本
5.1 测试用例右边会有三个小点,点击会出现下图
图五
5.2 选择想导出的语言,目前官方支持三种
Java JUnit,JavaScript Mocha,Python pytest
5.3 导出示例
导出文件为python
# Generated by Selenium IDE
import pytest
import time
import json
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
class TestFlightSearchList():
def setup_method(self, method):
self.driver = webdriver.Chrome()
self.vars = {}
def teardown_method(self, method):
self.driver.quit()
def wait_for_window(self, timeout = 2):
time.sleep(round(timeout / 1000))
wh_now = self.driver.window_handles
wh_then = self.vars["window_handles"]
if len(wh_now) > len(wh_then):
return set(wh_now).difference(set(wh_then)).pop()
def test_flightSearchList(self):
self.driver.get("https://www.baidu.com/")
self.driver.set_window_size(1440, 857)
self.driver.find_element(By.ID, "kw").send_keys("baidu")
self.driver.find_element(By.ID, "kw").send_keys(Keys.ENTER)
self.vars["window_handles"] = self.driver.window_handles
self.driver.find_element(By.LINK_TEXT, "百度一下,你就知道").click()
self.vars["win6702"] = self.wait_for_window(2000)
self.driver.switch_to.window(self.vars["win6702"])
官方文档:https://www.seleniumhq.org/selenium-ide/docs/en/introduction/getting-started/
Selenium 3+Python 3 自动化测试项目实战 从菜鸟到高手 田春成 李靖 /著
网友评论