selenium基础

Selenium api

 selenium基础

 

 

我们把这些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

 selenium基础

 

 

 

<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 方法按链接的文本进行模糊查找。

例如,百度首页上的“登录”超级链接

 selenium基础

 

 

 

它的链接文本属性为“登录”

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 进行查找。例如,百度首页的搜索按钮。

 selenium基础

 

 

 

其 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基础

 

 

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脚本");

三、工具类:

 

上一篇:SQL练习


下一篇:MySQL二