文章目录
- 一、基于 Java 语言的 Selenium 环境搭建
- 二、编写测试脚本
- 1.定浏览器驱动,打开浏览器
- 1.1 IE
- 1.2 Firefox
- 1.3 Google
- 2.关闭浏览器窗口
- 3.设置等待时间
- 4.打开网址
- 5.识别页面元素
- 5.1 driver.findElement(By.属性)
- 5.2 driver.findElements(By.属性).get(下标)
- 6.操作页面元素的方法
- 6.1 文本框+密码框+多行文本框
- 6.2 单选按钮+复选框
- 6.3 下拉列表
- 6.4 链接+命令按钮
- 6.5 通过TagName和xpath识别控件
- 6.6 通过id和ClassName识别控件
一、基于 Java 语言的 Selenium 环境搭建
- 安装 jre+eclipse,创建 Java 项目
- 在前面的测试方法之Java白盒测试(二)文章中有详细介绍
- 安装 selenium:在 eclipse 中导入如下包
✔ selenium-java-3.9.1.zip
✔ selenium-server-standalone-3.9.1.jar - 准备浏览器驱动器
✔ 无需安装,复制到某个位置(此位置需要写到代码中)
✔ IEDriverServer、chromedriver(google)、geckodriver(Firefox)
✔ webdriver.Ie()、.Chrome()、.Firefox() - 使用 Selenium IDE
✔ 断网安装 Firefox57
★ 选择自定义安装(不要选择默认安装),取消勾选"安装维护服务"
★ 安装完成后,工具—选项—常规—firefox 更新:勾选“不检查更新”即可,去掉勾选“自动更新搜索引擎”
✔ 联网安装 SeleniumIDE
★ 设置—附加组件—扩展—搜索 SeleniumIDE,然后安装
★ 在Web自动化测试实战(二)文章中也有详细介绍过SeleniumIDE - 打开selenium ide,创建一个项目
- 点击REC录制脚本,输入要录制的网站地址,点击开始录制即可
- 录制完成如下,selenium ide个人觉得没有功能非常一般low的很
二、编写测试脚本
1.定浏览器驱动,打开浏览器
1.1 IE
- System.setProperty(“webdriver.ie.driver”, “C:\…\IEDriverServer.exe”);
- WebDriver driver = new InternetExplorerDriver();
- 运行代码,成功打开IE浏览器
1.2 Firefox
- 需事先安装对应驱动版本的浏览器
- System.setProperty(“webdriver.gecko.driver”, “C:/…/geckodriver.exe”);
- System.setProperty(“webdriver.firefox.bin”,“E:/Mozilla Firefox/firefox.exe”);
- WebDriver driver = new FirefoxDriver();
- 运行代码,成功打开FireFox浏览器
1.3 Google
- System.setProperty(“webdriver.chrome.driver”, “C:\…\chromedriver.exe”);
- WebDriver driver = new ChromeDriver();
2.关闭浏览器窗口
driver.close();
✔ 关闭页面driver.quit();
✔ 关闭页面
✔ 关闭相关进程- 使用close方法能关闭浏览器,但是进程却无法结束掉
- 使用quit方法,则可以结束掉进程
3.设置等待时间
操作太快容易导致对象控件不出现,从而失败。
- 隐式等待
✔ driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
★ 隐式等待采用全部设置,所有的 findElement 方法都会隐式等待 1s
★ 上述方法针对执行脚本的所有对象,等待 3 秒。 - Thread.sleep(3000);//ms
✔ 只需放在需要等待的位置
4.打开网址
说明: 为了方便测试,这里需要搭建一个webtours的案例网站,博主在自动化接口实战(一)文章有过详细搭建,这里博主再演示一遍,也是给自己加深印象
- 安装网站所需的环境perl
- 启动服务器,点击批处理或者xigui32.exe都可以
- 输入http://localhost:1080/webtours/则可以访问网站了
- 注册账号,即可登录,注册的用户数据不是保存到数据库,而是保存到文件中的
- driver.get(“http://localhost:1080/webtours”);
- driver.getTitle()
✔ 获得浏览器网页标题(字符串)
5.识别页面元素
5.1 driver.findElement(By.属性)
说明1: 搭建一个嵌套框架页面如下,最外面的为index页面,里面嵌套三个页面
说明2: 将test目录放在C:\WebTours\MercuryWebTours目录下,那么就相当于搭建了一个网站,跟webtours一样开启xigui服务器即可访问
- 查询符合属性要求的第一个对象。
- 适用于文本框、密码框、命令按钮、单选按钮。
- 属性
✔ name(“值”)
✔ tagName(“标签名”)
★ 标签即<>内的关键字。
✔ xpath("//标记名[@属性名=‘属性值’]")
✔ id
✔ className
★ CSS class 属性的值
✔ linkText
★ <a href>和</a>之间的内容
✔ partialLinkText
★ <a href>和</a>之间的部分文本值
5.2 driver.findElements(By.属性).get(下标)
- 查询符合属性要求的所有对象;
- 适用于单选按钮、复选框、链接等。
- 使用 get(下标)可以选择某个,从 0 开始。
6.操作页面元素的方法
6.1 文本框+密码框+多行文本框
sendKeys(“数据”)
clear()
✔ 清空getAttribute(“属性名”)
✔ 获取对应属性的属性值,如 valuegetText()
✔ 获取文本值
✔ 可能获得不到数据- 定位用户名输入框,发送数据
- 运行脚本,成功的定位用户名输入框并发送指定数据到输入框
- 清空用户名输入框数据,然后再输入新的数据
- 通过getAttribute方法获取属性值
- 通过getText方法获取文本值,结果显示没有获取到,因为这个方法时灵时不灵,所以可以优先使用getAttribute方法进行获取
6.2 单选按钮+复选框
click()
✔ 单击/选中isSelected()
✔ 是否选中- 检查页面中单选按钮元素信息
- 在点击选中性别男之前打印是否选中性别(默认单选按钮为第一个,所以是男的而不是女的),选中之后再次打印是否选中性别,最后打印出获取的属性值
- 如果要选择第二个单选按钮女而不是默认选择的第一个男,那么则需要通过目录5.2查找所有的元素,并通过下标获定位到女这个单选按钮
- 定位复选框,并选择第1个和第三个,如果取消选择的复选框,则再进行点击此复选框即可
6.3 下拉列表
new Select(driver.findElement(By.name(“select 控件名”))).
selectByIndex(下标)
✔ 根据下标选择某项,从 0 开始selectByVisibleText(“数据”)
✔ 根据列表框中显示的文本选择某项selectByValue(“值”)
✔ 根据值选择某项- 选择下拉列表中的第三个元素,并打印其value值
- 除了通过selectByIndex选择下标,还可以通过selectByValue以及selectByVisibleText来选择下拉列表中的元素
6.4 链接+命令按钮
click()
✔ 单击- 在login页面中存在top及左边两个超链接,如下所示
- 现在则通过linkText以及partialLinkText方法来定位到以上两个超链接文本,其中partialLinkText方法是匹配其中某个链接文本字段,不需要写全
- 定位登录按钮元素,进行点击操作
6.5 通过TagName和xpath识别控件
- 首先检查login页面元素,一共存在8个input标签
- 那么通过TagName匹配页面中的input标签,则需要使用findElements方法,因为结果不是一个,如果使用findElement方法,则默认定位到第一个input标签元素,博主这里通过循环遍历匹配的input标签的元素列表长度,来对用户名密码的input标签进行数据的发送
- 打印出login页面中所有的文本数据,即匹配TagName标签为body整个页面数据
- 通过xpath匹配性别单选按钮中value为0的选项也就是女
6.6 通过id和ClassName识别控件
- 通过id定位用户名输入框并发送数据
- 在login页面中存在两个classname值为text的控件
- 所以博主这使用findElements来匹配获取所有,然后对用户名进行输入数据对登录按钮进行打印value值