第六章 基于 Java 语言的 Selenium 基础
一、 基于
Java
语言的
Selenium
环境搭建
安装
jre+eclipse
,创建
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
,然后安装
二、 编写测试脚本
1
指定浏览器驱动,打开浏览器
1.1 IE
System.setProperty("webdriver.ie.driver", "C:\\...\\IEDriverServer.exe");
WebDriver driver = new InternetExplorerDriver();
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();
1.3 Google
System.setProperty("webdriver.chrome.driver", "C:\\...\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
2
关闭浏览器窗口
driver.close();
关闭页面
driver.quit();
关闭页面
关闭相关进程
3
设置等待时间
操作太快容易导致对象控件不出现,从而失败。
隐式等待
driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
隐式等待采用全部设置,所有的
findElement
方法都会隐式等待
1s
上述方法针对执行脚本的所有对象,等待
3
秒。
Thread.sleep(3000);
//ms
只需放在需要等待的位置。
4
打开网址
driver.get("http://localhost:1080/webtours");
driver.getTitle()
获得浏览器网页标题(字符串)
5
识别页面元素
5.1 driver.findElement(By.
属性
)
查询符合属性要求的第一个对象。
适用于文本框、密码框、命令按钮、单选按钮。
属性
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("
属性名
")
获取对应属性的属性值,如
value
getText()
获取文本值
可能获得不到数据
6.2
单选按钮
+
复选框
click()
单击
/
选中
isSelected()
是否选中
6.3
下拉列表
new Select(driver.findElement(By.name("select
控件名
"))).
selectByIndex(
下标
)
根据下标选择某项,从
0
开始
selectByVisibleText("
数据
")
根据列表框中显示的文本选择某项
selectByValue("
值
")
根据值选择某项
6.4
链接
+
命令按钮
click()
单击
7
切换
frame
框架
driver.switchTo().defaultContent();
切回主文档
每次打开一个新网页时,应使用此句
driver.switchTo().frame(1
或
"body");
表示进入第
2
个
frame
或名为
body
的
frame
如果
frame
中有
frameset
,则需要层层切换
三、 增强测试脚本
1
添加检查点
Boolean res=driver.findElement(By.tagName("body")).getText().contains("Welcome")
返回
true
或
false
。
检查时判断的是前台文本。
2
参数化
2.1 Java
读文件
File file=new File("C:/.../flights.txt");
FileReader reader=new FileReader(file);
BufferedReader buffer=new BufferedReader(reader);
String row=null;
while((row=buffer.readLine())!=null){
String columns[]=row.split("\t");
for(String x:columns)
System.out.println(x);
}
reader.close();
2.2
输入数据参数化
while((row=chars.readLine())!=null){
String cols[]=row.split("\t");
new Select(driver.findElement(By.name("depart"))).selectByVisibleText(cols[0]);
new Select(driver.findElement(By.name("arrive"))).selectByVisibleText(cols[1]);
}
使用循环直接实现局部迭代。
2.3
检查点参数化
Boolean bookResult=driver.findElement(By.tagName("body")).getText().
contains("Flight 241 leaves "+cols[0]+" for "+cols[1]);
3
使用输出值
3.1
输出实际结果
String flightNum=driver.findElements(By.name("outboundFlight")).get(1).
getAttribute("value").substring(0, 3);
System.out.println(flightNum);
3.2
使用输出值参数化
Boolean bookResult=driver.findElement(By.tagName(