selenium20 中文帮助文档Word文件下载.docx
《selenium20 中文帮助文档Word文件下载.docx》由会员分享,可在线阅读,更多相关《selenium20 中文帮助文档Word文件下载.docx(20页珍藏版)》请在冰豆网上搜索。
importorg.openqa.selenium.WebDriver;
importorg.openqa.selenium.WebElement;
importorg.openqa.selenium.firefox.FirefoxDriver;
importorg.openqa.selenium.support.ui.ExpectedCondition;
importorg.openqa.selenium.support.ui.WebDriverWait;
publicclassSelenium2Example
{
publicstaticvoidmain(String[]args){
//CreateanewinstanceoftheFirefoxdriver
//Noticethattheremainderofthecodereliesontheinterface,
//nottheimplementation.
//AndnowusethistovisitGoogle
driver.get("
//Alternativelythesamethingcanbedonelikethis
//driver.navigate().to("
//Findthetextinputelementbyitsname
WebElementelement=driver.findElement(By.name("
q"
));
//Entersomethingtosearchfor
element.sendKeys("
Cheese!
//Nowsubmittheform.WebDriverwillfindtheformforusfromtheelement
element.submit();
//Checkthetitleofthepage
System.out.println("
Pagetitleis:
"
+driver.getTitle());
//Google'
ssearchisrendereddynamicallywithJavaScript.
//Waitforthepagetoload,timeoutafter10seconds
(newWebDriverWait(driver,10)).until(newExpectedCondition<
Boolean>
(){
publicBooleanapply(WebDriverd){
returnd.getTitle().toLowerCase().startsWith("
cheese!
}
});
//Shouldsee:
-GoogleSearch"
//Closethebrowser
driver.quit();
}
第2章Webdirver对浏览器的支持
2.1
HtmlUnitDriver
优点:
HtmlUnitDriver不会实际打开浏览器,运行速度很快。
对于用FireFox等浏览器来做测试的自动化测试用例,运行速度通常很慢,HtmlUnitDriver无疑是可以很好地解决这个问题。
缺点:
它对JavaScript的支持不够好,当页面上有复杂JavaScript时,经常会捕获不到页面元素。
使用:
WebDriverdriver=newHtmlUnitDriver();
2.2
FireFoxDriver
FireFoxDirver对页面的自动化测试支持得比较好,很直观地模拟页面的操作,对JavaScript的支持也非常完善,基本上页面上做的所有操作FireFoxDriver都可以模拟。
启动很慢,运行也比较慢,不过,启动之后Webdriver的操作速度虽然不快但还是可以接受的,建议不要频繁启停FireFoxDriver。
WebDriverdriver=newFirefoxDriver();
Firefoxprofile的属性值是可以改变的,比如我们平时使用得非常频繁的改变useragent的功能,可以这样修改:
FirefoxProfileprofile=newFirefoxProfile();
profile.setPreference("
general.useragent.override"
"
someUAstring"
WebDriverdriver=newFirefoxDriver(profile);
2.3
InternetExplorerDriver
直观地模拟用户的实际操作,对JavaScript提供完善的支持。
是所有浏览器中运行速度最慢的,并且只能在Windows下运行,对CSS以及XPATH的支持也不够好。
WebDriverdriver=newInternetExplorerDriver();
第3章使用操作
3.1
如何找到页面元素
Webdriver的findElement方法可以用来找到页面的某个元素,最常用的方法是用id和name查找。
下面介绍几种比较常用的方法。
3.1.1ByID
假设页面写成这样:
<
inputtype="
text"
name="
passwd"
id="
passwd-id"
/>
那么可以这样找到页面的元素:
通过id查找:
WebElementelement=driver.findElement(By.id("
3.1.2ByName
或通过name查找:
WebElementelement=driver.findElement(By.name("
3.1.3ByXPATH
或通过xpath查找:
WebElementelement=driver.findElement(By.xpath("
//input[@id='
passwd-id'
]"
3.1.4ByClassName
divclass="
cheese"
>
span>
Cheddar<
/span>
/div>
divclass="
Gouda<
可以通过这样查找页面元素:
List<
WebElement>
cheeses=driver.findElements(By.className("
3.1.5ByLinkText
假设页面元素写成这样:
ahref="
那么可以通过这样查找:
WebElementcheese=driver.findElement(By.linkText("
3.2
如何对页面元素进行操作
找到页面元素后,怎样对页面进行操作呢?
我们可以根据不同的类型的元素来进行一一说明。
3.2.1输入框(textfieldortextarea)
找到输入框元素:
在输入框中输入内容:
element.sendKeys(“test”);
将输入框清空:
element.clear();
获取输入框的文本内容:
element.getText();
3.2.2下拉选择框(Select)
找到下拉选择框的元素:
Selectselect=newSelect(driver.findElement(By.id("
select"
)));
选择对应的选择项:
select.selectByVisibleText(“mediaAgencyA”);
或
select.selectByValue(“MA_ID_001”);
不选择对应的选择项:
select.deselectAll();
select.deselectByValue(“MA_ID_001”);
select.deselectByVisibleText(“mediaAgencyA”);
或者获取选择项的值:
select.getAllSelectedOptions();
select.getFirstSelectedOption();
3.2.3单选项(RadioButton)
找到单选框元素:
WebElementbookMode=driver.findElement(By.id("
BookMode"
选择某个单选项:
bookMode.click();
清空某个单选项:
bookMode.clear();
判断某个单选项是否已经被选择:
bookMode.isSelected();
3.2.4多选项(checkbox)
多选项的操作和单选的差不多:
WebElementcheckbox=driver.findElement(By.id("
myCheckbox."
checkbox.click();
checkbox.clear();
checkbox.isSelected();
checkbox.isEnabled();
3.2.5按钮(button)
找到按钮元素:
WebElementsaveButton=driver.findElement(By.id("
save"
点击按钮:
saveButton.click();
判断按钮是否enable:
saveButton.isEnabled();
3.2.6左右选择框
也就是左边是可供选择项,选择后移动到右边的框中,反之亦然。
例如:
Selectlang=newSelect(driver.findElement(By.id("
languages"
lang.selectByVisibleText(“English”);
WebElementaddLanguage=driver.findElement(By.id("
addButton"
addLanguage.click();
3.2.7弹出对话框(Popupdialogs)
Alertalert=driver.switchTo().alert();
alert.accept();
alert.dismiss();
alert.getText();
3.2.8表单(Form)
Form中的元素的操作和其它的元素操作一样,对元素操作完成后对表单的提交可以:
WebElementapprove=driver.findElement(By.id("
approve"
approve.click();
approve.submit();
//只适合于表单的提交
3.2.9上传文件(UploadFile)
上传文件的元素操作:
WebElementadFileUpload=driver.findElement(By.id("
WAP-upload"
StringfilePath="
C:
\test\\uploadfile\\media_ads\\test.jpg"
;
adFileUpload.sendKeys(filePath);
3.2.10
Windows和Frames之间的切换
一般来说,登录后建议是先:
driver.switchTo().defaultContent();
切换到某个frame:
driver.switchTo().frame("
leftFrame"
从一个frame切换到另一个frame:
mainFrame"
切换到某个window:
driver.switchTo().window("
windowName"
3.2.11
拖拉(DragandDrop)
WebElementelement=driver.findElement(By.name("
source"
WebElementtarget=driver.findElement(By.name("
target"
(newActions(driver)).dragAndDrop(element,target).perform();
3.2.12
导航(NavigationandHistory)
打开一个新的页面:
driver.navigate().to("
通过历史导航返回原页面:
driver.navigate().forward();
driver.navigate().back();
3.3
高级使用
3.3.1改变useragent
UserAgent的设置是平时使用得比较多的操作:
profile.addAdditionalPreference("
"
someUAstring"
3.3.2读取Cookies
我们经常要对的值进行读取和设置。
增加cookie:
//Nowsetthecookie.Thisone'
svalidfortheentiredomain
Cookiecookie=newCookie("
key"
value"
driver.manage().addCookie(cookie);
获取cookie的值:
//AndnowoutputalltheavailablecookiesforthecurrentURL
Set<
Cookie>
allCookies=driver.manage().getCookies();
for(CookieloadedCookie:
allCookies){
System.out.println(String.format("
%s->
%s"
loadedCookie.getName(),loadedCookie.getValue()));
根据某个cookie的name获取cookie的值:
driver.manage().getCookieNamed("
mmsid"
删除cookie:
//Youcandeletecookiesin3ways
//Byname
driver.manage().deleteCookieNamed("
CookieName"
//ByCookie
driver.manage().deleteCookie(loadedCookie);
//Orallofthem
driver.manage().deleteAllCookies();
3.3.3调用JavaScript
Webdriver对JavaScript的调用是通过JavascriptExecutor来实现的,例如:
JavascriptExecutorjs=(JavascriptExecutor)driver;
js.executeScript("
(function(){inventoryGridMgr.setTableFieldValue('
+inventoryId+"
'
'
+fieldName+"
+value+"
})()"
3.3.4Webdriver截图
如果用webdriver截图是:
driver=webdriver.Firefox()
driver.save_screenshot("
\error.jpg"
)
3.3.5页面等待
因为Load页面需要一段时间,如果页面还没加载完就查找元素,必然是查找不到的。
最好的方式,就是设置一个默认等待时间,在查找页面元素的时候如果找不到就等待一段时间再找,直到超时。
Webdriver提供两种方法,一种是显性等待,另一种是隐性等待。
显性等待:
WebDriverdriver=newFirefoxDriver();
//somedomain/url_that_delays_loading"
WebElementmyDynamicElement=(newWebDriverWait(driver,10))
.until(newExpectedCondition<
(){
@Override
publicWebElementapply(WebDriverd){
returnd.findElement(By.id("
myDynamicElement"
}});
隐性等待:
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
WebElementmyDynamicElement=driver.findElement(By.id("
第4章RemoteWebDriver
当本机上没有浏览器,需要远程调用浏览器进行自动化测试时,需要用到RemoteWebDirver.
4.1
使用RemoteWebDriver
importjava.io.File;
import.URL;
importorg.openqa.selenium.OutputType;
importorg.openqa.selenium.TakesScreenshot;
importorg.openqa.selenium.remote.Augmenter;
importorg.openqa.selenium.remote.DesiredCapabilities;
importorg.openqa.selenium.remote.RemoteWebDriver;
publicclassTesting{
publicvoidmyTest()throwsException{
WebDriverdriver=newRemoteWebDriver(
newURL("
//localhost:
4446/wd/hub"
),
DesiredCapabilities.firefox());
//RemoteWebDriverdoesnoti