selenium介绍
Selenium[sə'linɪəm]也是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE、MozillaFirefox、Mozilla Suite等。
这个工具的主要功能包括:测试与浏览器的兼容性棗测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能棗创建衰退测试检验软件功能和用户需求。支持自动录制动作和自动生成.Net、Java、Perl等不同语言的测试脚本。
Selenium2.X与1.X的比较
首先,selenium 与 WebDriver的关系可以简单的理解为:selenium2.0 = selenium 1.0(rc) + webdriver
Selenium 2的主要新功能是集成了WebDriver--曾经是Selenium1(又名SeleniumRC)的竞争对手。Selenium RC在浏览器中运行JavaScript应用,而WebDriver通过原生浏览器支持或者浏览器扩展直接控制浏览器。
将Selenium RC 和Webdriver这两个项目合并的原因是:
WebDriver弥补了Selenium1的缺点,跳出了Javascript的沙箱,提供快速、轻量级的浏览器模拟器Selenium解决了WebDriver存在的问题(例如支持广泛的浏览器)
selenium 2.0最显著的特点就是不用再启动server端了。而在运行selenium1.0程序之前,我们得先启动seleniumserver端(selenium remote control),即selemiumRC。
Selenium1.0不能处理一下事件:
1)本机键盘和鼠标事件
2)同源策略XSS/HTTP(S)
3)弹出框,对话框(基本身份认证,自签名的证书和文件上传/下载)
Selenium2.0有简洁的API,WebDriver和WebElement对象,更好的抽象。且支持多中操作系统,多语言,多浏览器。
Selenium2.0组件
selenium主要是通过selenium RC作为代理成功利用浏览器同源策略,注入自动化额外的JS脚本来支持自动化测试的;所以selenium1.X的所有组件包括:IDE,RC,Grid;
selenium2.X开始引入了webdriver的概念,有了webdriver就不需要再通过额外的JS在支持自动化操控了,所以就不需要破解同源,也就不需要代理了。所以2.X开始的组件有:IDE,webdriver,SeleniumServer,Grid。
为什么selenium既然是使用webdriver替换了原来的RC,为什么还会多一个组件呢?那是因为webdriver只能支持本地的浏览器驱动,如果想对远程的主机上进行浏览器测试的话,就需要使用seleniumserver来完成通信和指令传送的工作;此外为了向前兼容selenium1.X的自动化脚本,seleniumserver另外的功能其实等同于selenium1.X中的RC组件。
IDE:是一个FF上面的插件,可以录制用户在页面上的操作,然后可以转换成各种selenium所支持语言的对应版本。
webDriver:selenium2.X中的webdriver根据不同的语言有不同的版本,安装时一定要对上,想使用多个语言的话,那就要安装多个语言版本的webdriver了。
Selenium Server:是一个jar包,因为selenium最初就是用java写的,后来扩展支持了这么多的语言;这个server在selenium2.X中主要作用是在远程机器上执行selenium脚本,以达到远程及分布执行的目的,后面的grid时就依附这个功能。这个服务的启动方式:java-jar selenium-server-standalone-2.32.0.jar
Grid:是selenium的扩展组件。可以利用这个组件很好的规划自动化的脚本执行和实施。利用这个组件提供的功能,我们就可以在一台机器上控制所有脚本的执行方式[在哪台主机上的浏览器中执行哪条用例]和结果收集的工作。
配置环境
以java开发脚本为例
在http://seleniumhq.org/download下载最新版本的selemium-java-2.xx.x.zip。解压后将其中的selenium-java-xxx-src.jar和selenium-java-xxx.jar两个包导入到Eclipse的工程路径中。
一般selenium会和testng相结合使用安装Testng在eclipse界面选择Help->installNewSoftware,选择【Add】,在location中输入http://beust.com/eclipse,选择TestNG,点击【Next】,开始下载安装。安装完成后,选择BuildPath敁ConfigureBuildPath,在TaskRepository下有TestNG标签。安装成功。
selenium自动测试例子:打开浏览器,输入帐号密码登录,页面跳转,获取元素
package test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
//import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import java.util.Date;
import java.util.concurrent.TimeUnit;
public class Test_share {
//private static Logger logger = Logger.getLogger(test_share.class);
boolean res = true;
//private String errmsg = "";
Date stime = new Date();
//public testReporter testReporter = new testReporter();
private String loginUrl = "http://club.mail.163.com/jifen/index.do";
WebDriver driver;
@BeforeClass
public void setupBrowser(){
//启动chrome浏览器
System.setProperty("webdriver.chrome.driver","C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe");
driver = new ChromeDriver();
//设置页面等待15秒超时
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
//开页面
driver.get(loginUrl);
}
@Test
public void testExchange() throws InterruptedException{
//通过id找文本框
WebElement element = driver.findElement(By.id("id_username_txt"));
//清除输入框中策内容
element.clear();
//填入账号
element.sendKeys("yedazhuang2014");
//填密码
WebElement element2 = driver.findElement(By.id("id_password_txt"));
element2.clear();
element2.sendKeys("123456789a");
//点击提交按钮
WebElement element3 = driver.findElement(By.xpath("//a/span"));
Thread.sleep(1000);
element3.click();
//检查页面title
System.out.println("page title is: " + driver.getTitle());
//检查url
System.out.println("当前url是:"+driver.getCurrentUrl());
//跳转到目标页面
driver.get("http://club.mail.163.com/jifen/sanqu/list.do");
Thread.sleep(3000);
WebElement topic = driver.findElement(By.xpath("//a/font[text()='[兑换]']"));
topic.click();
Thread.sleep(3000);
//获取窗口句柄
String[] handles = new String[driver.getWindowHandles().size()];
driver.getWindowHandles().toArray(handles);
driver.switchTo().window(handles[1]);
driver.findElement(By.xpath("/html/body/div[4]/div[2]/div/div/div/div[2]/div/div[2]/span/a")).click();
}
@AfterClass
public void tearDownDriver(){
driver.quit();
}
}
Tips
选择适当的元素定位方法。
webdriver提供了丰富的API,有多种定位策略:id,name,css选择器,xpath以及LinkText等,其中css选择器定位元素效率相比xpath要高些,使用id,name属性定位元素是最可靠,效率最高的一种办法。
如何操作页面元素也是一个关键。
对于不同类型的元素操作方法也是不同的。
常用元素的常用操作方法:
输入框:sendKeys();clear(); getText();
下拉框:
选择对应的选择项:selectByVisibleText();selectByValue();
不选择对应的选择项:deselectByVisibleText();deselectByValue(); deselectAll();
获取选择项的值:getAllSelectedOptions();getFirstSelectedOptions();
单选项:clear(); click(); isSelected();
多选项: clear(); click(); isSelected(); isEnabled();
按钮: clear(); isEnabled();
左右选择框:下拉框和按钮的组合
表单:click(); submit();
获得弹出窗是我们经常需要用到的。
捕获或者说定位弹出窗口的关键在于获得弹出窗口的句柄。
在代码里,使用getWindowHandle方法来获取当前浏览器窗口的句柄,使用了getWindowHandles方法获取所有弹出的浏览器窗口的句柄,然后通过排除当前句柄的方法来得到新开窗口的句柄。在获取新弹出窗口的句柄后,使用switchto.window(newwindow_handle)方法,将新窗口的句柄作为参数传入既可捕获到新窗口了。
处理对话框也是我们经常需要用到的。
使用webdriver的switchto().alert()可以获得对话框的对象,然后运用其方法进行操作。
getText() 得到文本值
accept() 相当于确认
页面等待:因为Load页面需要一段时间,如果页面还没加载完就查找元素,必然是查找不到的。最好的方式,就是设置一个默认等待时间,在查找页面元素的时候如果找不到就等待一段时间再找,直到超时。
有两种等待方式:
显性等待:使用WebDriverWait类+ExpectedConditions接口
作为显性等待,也有一种是通过Thread.sleep()设置
隐型等待:
当要查找元素,而这个元素没有马上出现时,会告诉WebDriver查询 Dom一定时间(设置了10s)。默认值是0,设置之后,这个时间在WebDriver对象实例整个生命周期都起作用。
---------------------
【转载,仅作分享,侵删】
作者:若海音符
来源:CSDN
原文:https://blog.csdn.net/Chenyt01/article/details/51786152
版权声明:本文为博主原创文章,转载请附上博文链接!
|
|