Selenium是ThroughtWorks公司开发的一套Web自动化测试工具。
它分为三个组件:
- Selenium IDE
- Selenium RC (Remote Control)
- Selenium Webdriver
Selenium IDE是firefox的一个插件,允许测试人员录制脚本并回放。
Selenium RC和Selenium Webdriver是测试框架,提供多种语言的API。不同的是,Selenium Webdriver以一种更底层、更灵活的方式来操作浏览器,并不仅仅使用javascript。这样它可以绕开浏览器的沙箱限制,实现Selenium RC不支持的框架、弹出窗口、页面导航、下拉菜单、基于AJAX的UI元素等控件的操作。以及,Selenium Webdriver不需要本地服务器。
Selenium 1.x版本只包含前两个组件。从2.0开始Webdriver加入其中。
准备工作
由于本篇教程用Java做示范,所以请先安装JDK并配置好环境变量。
到官网下载库文件selenium-java-2.xx.x.zip,如果官网被墙了就到CSDN去找。打开压缩包,selenium-java-2.25.0.jar的库文件,需要导入到项目中;selenium-java-2.25.0-srcs.jar是源码,里面是一些*.java文件;lib文件夹里面是依赖包,也要一起导入到项目中。
除了firefox浏览器,其它浏览器基本都需要驱动,同样请到官网下载。
浏览器操作
打开浏览器
打开默认路径的firefox
WebDriver driver = new FirefoxDriver();
打开指定路径的firefox
System.serProperty("webdriver. firefox.bin", "C:\\Program Files\\Mozilla Firefox\\firefox.exe"); WebDriver driver = new FirefoxDriver();
或者
File pathToFirefoxBinary = new File("C:\\Program Files\\Mozilla Firefox\\firefox.exe"); FirefoxBinary firefoxbin = new FirefoxBinary(pathToFirefoxBinary); WebDriver driver = new FirefoxDriver(firefoxbin,null);
打开ie(需要驱动)
1. System.setProperty("webdriver.ie.driver", "...\\IEDriverServer.exe") 2. WebDriver driver = new InternetExplorerDriver();
打开chrome(需要驱动)
System.setProperty("webdriver.chrome.driver", "...\\chromedriver.exe" ); System.setProperty("webdriver.chrome.bin", "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe"); WebDriver driver = new ChromeDriver();
打开URL
用get方法
driver.get("http://www.51.com");
或者用navigate方法,然后再调用to方法
driver.navigate().to("http://www.51.com");
关闭浏览器
用quit方法
driver.quit();
或者用close方法
driver.close();
返回当前页面url和title
得到title
String title = driver.getTitle();
得到当前页面url
String currentUrl = driver.getCurrentUrl();
输出title和currenturl
System.out.println(title+"\n"+currentUrl);
其他方法
getWindowHandle()
返回当前的浏览器的窗口句柄getWindowHandles()
返回当前的浏览器的所有窗口句柄getPageSource()
返回当前页面的源码
对浏览器的支持
HtmlUnit Driver
优点:HtmlUnit Driver不会实际打开浏览器,运行速度很快。对于用FireFox等浏览器来做测试的自动化测试用例,运行速度通常很慢,HtmlUnit Driver无疑是可以很好地解决这个问题。
缺点:它对JavaScript的支持不够好,当页面上有复杂JavaScript时,经常会捕获不到页面元素。
使用:
WebDriver driver = new HtmlUnitDriver();
FireFox Driver
优点:FireFox Dirver对页面的自动化测试支持得比较好,很直观地模拟页面的操作,对JavaScript的支持也非常完善,基本上页面上做的所有操作FireFox Driver都可以模拟。
缺点:启动很慢,运行也比较慢,不过,启动之后Webdriver的操作速度虽然不快但还是可以接受的,建议不要频繁启停FireFox Driver。
使用:
WebDriver driver = new FirefoxDriver();
Firefox profile的属性值是可以改变的,比如我们平时使用得非常频繁的改变useragent的功能,可以这样修改:
FirefoxProfile profile = new FirefoxProfile(); profile.setPreference("general.useragent.override", "some UAstring"); WebDriver driver = new FirefoxDriver(profile);
InternetExplorer Driver
优点:直观地模拟用户的实际操作,对JavaScript提供完善的支持。
缺点:是所有浏览器中运行速度最慢的,并且只能在Windows下运行,对CSS以及XPATH的支持也不够好。
使用:
WebDriver driver = new InternetExplorerDriver();
选择器
By ID
页面:
<input type="text" name="passwd" id="passwd-id" />
代码:
WebElement element = driver.findElement(By.id("passwd-id"));
By Name
页面同上
代码:
WebElement e = dr.findElement(By.name("passport_51_user"));
By XPATH
1. WebElement element 2. = driver.findElement(By.xpath("//input[@id='passwd-id']"));
By Class Name
页面:
<div class="cheese"> <span>Cheddar</span> </div> <divclass="cheese"> <span>Gouda</span> </div>
代码:
1. List<WebElement> cheeses 2. = driver.findElements(By.className("cheese"));
By Link Text
页面:
<a href="http://www.google.com/search?q=cheese">cheese</a>
代码:
WebElement cheese = driver.findElement(By.linkText("cheese"));
控件操作
输入框
WebElement element = driver.findElement(By.id("passwd-id")); //在输入框中输入内容: element.sendKeys(“test”); //将输入框清空: element.clear(); //获取输入框的文本内容: element.getText();
单选框
WebElement radio = driver.findElement(By.id("BookMode")); //选择某个单选项: radio.click(); //清空某个单选项: radio.clear(); //判断某个单选项是否已经被选择: radio.isSelected();
多选框
WebElement checkbox = driver.findElement(By.id("myCheckbox")); //与单选框类似 checkbox.click(); checkbox.clear(); checkbox.isSelected(); checkbox.isEnabled();
按钮
WebElement saveButton = driver.findElement(By.id("save")); //点击按钮: saveButton.click(); //判断按钮是否enable: saveButton.isEnabled ();
左右选择框
也就是左边是可供选择项,选择后移动到右边的框中,反之亦然。例如:
Select lang = new Select(driver.findElement(By.id("languages"))); lang.selectByVisibleText(“English”); WebElement addLanguage = driver.findElement(By.id("addButton")); addLanguage.click();
表单
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);