Selenium api
我们把这些Selenium方法或者接口分成三类,一类是driver相关,也就是操作浏览器本身设置,第二类是元素相关,就是一些元素的点击,输入等操作,第三类是一些工具支持类,例如截图,日志输出,事件监听。
一.浏览器本身设置
WebDriver driver = new FirefoxDriver();
点击查看WebDriver发现是一个接口,它的备注这样写的:WebDriver是一个测试的主要接口,它展现了一个理想化的web浏览器,它主要包括三个目录。1)控制浏览器本身 2)查找和选择元素 3)调试程序,比如异常处理。
driver.get("https://www.baidu.com");
这里的get方法的作用是,在当前浏览器窗口,加载一个新的web页面,是通过http get发生请求完成的。参数类型是String,一般是url。get方法就是打开一个网页的作用。
driver.manage().window().maximize();
从Selenium的源码文件,可以知道,manage是得到Option这类接口用的。 是在Option这个接口下面可以找到的。Option接口是这样描述的:An interfacefor managing stuff you would do in a browser menu,所以,这些操作都是来控制浏览器本身。
driver.navigate().to("http://news.baidu.com/");//打开测试页面
Navigation接口,主要包括平时浏览器的前进,后退,打开网址,刷新当前页操作。
driver.quit();退出浏览器
Interface Alert(基于浏览器的弹出框)
弹出对话框(Popup dialogs)
Alert alert = driver.switchTo().alert();//焦点定位,切换到当前弹窗
alert.accept(); //确定
alert.dismiss(); //取消
alert.getText(); //获取文本
alert.senkeys( );
二、元素相关:
web自动化测试的核心就是找到网页元素,并相应去操作元素。
Selenium中findElement接口能支持八种方法去查找网页元素
1.1查找元素的方法
By id
其 HTML 代码如下:
<input id="su" class="bg s_btn" type="submit" value="百度一下"/>如要操作该按钮,则可以通过 ID(id="su")作为查找条件获取该对象
WebElement baiduSearch = driver.findElement(By.id("su"));
另外,还可以执行 js 的 document.getElementById 来获取对象,脚本如下:
WebElement elementC=(WebElement) ((JavascriptExecutor) driver).executeScript("returndocument.getElementById('su')");
By name
<a class="mnav" name="tj_trnews" href="http://news.baidu.com">新闻</a>
WebElement news= driver.findElement(By.name("tj_trnews "));
3.LinkText 和 和 PartialLinkText
LinkText 方法按链接的文本进行查找,PartialLinkText 方法按链接的文本进行模糊查找。
例如,百度首页上的“登录”超级链接
它的链接文本属性为“登录”
driver.findElement(By.linkText("登录")).click();
driver.findElement(By.partialLinkText("登")).click();
By XPath
什么是Xpath
元素,我们说的元素之网页元素(web element)。在网页上面的文本输入框,按钮,多选,单选,标签,和文字都叫元素,总之,凡是能在页面显示的对象都可以作为页面元素对象。
元素定位, 有时候也叫Locator,一个HTML页面元素,可以用很多方法去描述这个元素的位置。打个比方,生活中地址,一个大厦,正常的地址是 xx省xx市xx区xx街道xxx号,这个具体描述就是这个大厦的Locator。同样的道理,一个网页元素,也有位置,也可以通过一些手段或者表达式去 描述这个元素在页面对应的位置。
XPath,XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力,XPath 很快的被开发者采用来当作小型查询语言。
Xpath基础:
/ |
绝对路径 |
表示从xml的根位置开始或子元素(一个层次结构) |
// |
相对路径 |
表示不分任何层次结构的选择元素 |
* |
通配符 |
|
[] |
条件 |
表示选择什么条件下的元素 |
@ |
属性 |
表示选择属性节点 |
and |
关系 |
表示条件的与关系 |
text() |
文本 |
表示选择文本内容 |
要选catalog 底下的 cd 中所有 price 元素可以用:
/catalog/cd/price
注: XPath 的开头是一个斜线(/)代表这是绝对路径。如果开头是两个斜线(//)表示文件中所有符合模式的元素都会被选出来,即使是处于树中不同的层级也会被选出来。//cd
选择未知的元素,下面这个语法会选出/catalog/cd 的所有子元素:
/catalog/cd/*
以下的语法会选出所有 catalog 的子元素中,包含有 price 作为子元素的元素。
/catalog/*/price
以下的语法会选出有两层父节点,叫做 price 的所有元素。
/*/*/price
以下的语法会选择出文件中的所有元素。
//*
选择分支
使用中括号可以选择分支。以下的语法从 catalog 的子元素中取出第一个叫做 cd 的元素。XPath 的定义中没有第0元素这种东西。
/catalog/cd[1]
以下语法选择 catalog 中的最后一个 cd 元素:( XPathj 并没有定义 first() 这种函式喔,用上例的 [1]就可以取出第一个元素。
/catalog/cd[last()]
以下语法选出含有 price 子元素的所有/catalog/cd 元素。
/catalog/cd[price]
以下语法选出 price 元素的值等于10.90的所有/catalog/cd 元素
/catalog/cd[price=10.90]
以下语法选出 price 元素的值等于10.90的所有/catalog/cd 元素 的 price 元素
/catalog/cd[price=10.90]/price
选择一个以上的路径
使用 Or 操作数(|)就可以选择一个以上的路径。例如:
/catalog/cd/title | catalog/cd/artist
选择所有 title 以及 artist 元素
//title | //artist
选择所有 title 以及 artist 以及 price 元素
//title | //artist | //price
选择属性
在 XPath 中,除了选择元素以外,也可以选择属性。属性都是以@开头。例如选择文件中所有叫做 country 的属性。
//@country
选择所有含有 country 这个属性的 cd 元素:
//cd[@country]
以下语法选择出含有属性的所有 cd 元素
//cd[@*]
以下语法选择出 country 属性值为 UK 的 cd 元
//cd[@country='UK']
安装firebug安装xpath
百度搜索输入框定位元素
打开百度首页—— 鼠标定位到搜索输入框——右键鼠标,选Inspect in FirePath—— 打开界面如下图
xpath定位
绝对路径定位
WebElement button = driver.findElement(By.xpath("/html/body/div/input[@value='查询']"));
一旦页面结构发生改变,改路径也随之失效,必须重新。 所以不推荐使用绝对路径的写法
利用元素属性定位
("//标签[@属性名=属性值]")
如果以上查找方法都无法定位到指定对象,那么可以按 XPath 进行查找。例如,百度首页的搜索按钮。
其 HTML 代码如下:
<input id="su" class="bg s_btn" type="submit" value="百度一下"/>
如要操作该按钮,则可以通过其 XPath 表达式“//input[@id='su']”作为查找条件获取该对象,XPath 的值可以通过 firebug 组件获取,也可以自己编写。
driver.findElement(By.xpath("//input[@id='su']"));
层级与属性结合
("//div[@class='m-container']/input").send_keys("username")
通过逻辑运算符定位
("//input[@id='a' and @class='su']/span/input")
1.2如何对页面元素进行操作
输入框(text field or textarea)
WebElement element = driver.findElement(By.id("passwd-id"));
element.sendKeys(“test”);//在输入框中输入内容:
element.clear(); //将输入框清空
element.getText(); //获取输入框的文本内容:
单选项(Radio Button)
WebElement radio=driver.findElement(By.id("BookMode"));
radio.click(); //选择某个单选项
radio.clear(); //清空某个单选项
radio.isSelected(); //判断某个单选项是否已经被选择
多选项(checkbox)
WebElement checkbox = driver.findElement(By.id("myCheckbox."));
checkbox.click();
checkbox.clear();
checkbox.isSelected();//是否可选
checkbox.isEnabled();//是否有效
按钮(button)
WebElement btn= driver.findElement(By.id("save"));
btn.click(); //点击按钮
btn.isEnabled (); //判断按钮是否enable
表单(Form)
Form中的元素的操作和其它的元素操作一样,对元素操作完成后对表单的提交可以:
WebElement approve = driver.findElement(By.id("approve"));
approve.click();
或
approve.submit();//只适合于表单的提交
上传文件
上传文件的元素操作:
WebElement adFileUpload =driver.findElement(By.id("WAP-upload"));
String filePath = "C:\test\\uploadfile\\media_ads\\test.jpg";
adFileUpload.sendKeys(filePath);
另:
isDisplayed()//是否展示,返回“true”或“false”
sendKeys()//只接收字符串,如“123”
Class Select
下拉选择框(Select)
Select select = new Select(driver.findElement(By.id("select")));
select.selectByVisibleText(“A”);
select.selectByValue(“1”);
select.deselectAll();
select.deselectByValue(“1”);
select.deselectByVisibleText(“A”);
select.getAllSelectedOptions();
select.getFirstSelectedOption();
Selenium 代码:
Select seList = new Select(driver.findElement(By.name("gpc")));
seList.selectByVisibleText("最近一周");
调用Java Script
Web driver对Java Script的调用是通过JavascriptExecutor来实现的,例如:
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("JS脚本");
三、工具类: