Selenium2.0中使用WeDriver API对页面进行操作,它最大的优点是不需要安装一个
selenium server就可以运行,但是对页面进行操作不如selenium1.0的Selenium RC API那么方便,很多时候我们项目可能需要结合2者一起使用。
比如说我们想直接用selenium里面提供的等待各种各样的窗口,frame,popUp,元素等,我们就可以直接调用selenium 1.0的:
void waitForCondition(
java.lang.String script, java.lang.String timeout)
void waitForFrameToLoad(java.lang.String frameAddress, java.lang.String timeout)
Waits for a new frame. to load.
void waitForPageToLoad(java.lang.String timeout)
Waits for a new page to load.
void waitForPopUp(java.lang.String windowID, java.lang.String timeout)
Waits for a popup window to appear and load up.
Selenium2.0提供了使用Selenium RC API的方法
实例如下:
我这里先定义一个
web driver, 同时让selenium也指向它
/***********/
public class Config {
public static WebDriver driver=null;
public static Selenium selenium=null;
public static final String URL="www.itwocx.com"
public static void IEWebDriverStart(){
// start a driver
System.setProperty ("webdriver.ie.driver","D:/Tools/Selenium/IEDriverServer_x64_2.41.0/IEDriverServer.exe");
driver=new InternetExplorerDriver();
// open testing URL
driver.get(URL);
}
// initial a Selenium driver
public static void initialSelenium(){
selenium = new WebDriverBackedSelenium(driver, URL);
}
}
/************/
下面我结合二者来做一个登陆操作:
Public class LoginMgr{
WebDriver driver=null;
// 这里使用Junit4来做case
@Test
public void testLogin(){
//打开ie浏览器并转向指定URL
Config.IEWebDriverStart();
driver=Utilities.Config.driver;
//这里页面元素放在一个frame里面,这个frame没有指定名字,所以用index
driver.switchTo().frame(0);
WebElement username=driver.findElement(By.id("nme"));
WebElement userPWD=driver.findElement(By.id("pwd"));
username.sendKeys("lery");
userPWD.sendKeys("1234");
driver.findElement(By.xpath("//input[@value='Login']")).click(); //click button后进入新页面,系统加载页面时间慢,这里用了selenium 1.0 的waitForPage api
Utilities.Config.initialSelenium();
Utilities.Config.selenium.waitForPageToLoad("4000");
ssert.assertEquals(HomePage.lableWelcomeText().getText(), "Welcome");
}
}