转:Selenium Webdriver使用技巧(四)

上一篇 / 下一篇  2014-05-05 12:02:54 / 个人分类:Selenium

封装与重用

 

WebDriver对页面的操作,需要找到一个WebElement,然后再对其进行操作,比较繁琐:

 // Find the text inputelement by itsname

WebElement element =driver.findElement(By.name("q"));

 

// Enter something to search for

element.sendKeys("Cheese!");

我们可以考虑对这些基本的操作进行一个封装,简化操作。比如,封装代码:

    protected voidsendKeys(Byby, String value){

       driver.findElement(by).sendKeys(value);

    }

那么,在测试用例可以这样简化调用:

sendKeys(By.name("q"),”Cheese!”);

 

看,这就简洁多了。

 

类似的封装还有:

package com.drutt.mm.end2end.actions;

 

 

import java.util.List;

import java.util.NoSuchElementException;

import java.util.concurrent.TimeUnit;

 

import org.openqa.selenium.By;

import org.openqa.selenium.WebElement;

importorg.openqa.selenium.remote.RemoteWebDriver;

importorg.openqa.selenium.support.ui.WebDriverWait;

 

importcom.drutt.mm.end2end.data.TestConstant;

 

public class WebDriverAction {

 

   //protected WebDriverdriver;

   protectedRemoteWebDriverdriver;

   protectedWebDriverWaitdriverWait;

 

 

    protected booleanisWebElementExist(Byselector) {

       try {

           driver.findElement(selector);

           return true;

       } catch(NoSuchElementException e) {

           return false;

       }

    }

   

    protectedStringgetWebText(By by) {

       try {

       return driver.findElement(by).getText();

       } catch (NoSuchElementException e) {

           return "Textnot existed!";

       }

    }

   

    protectedvoidclickElementContainingText(By by, String text){

       List<WebElement>elementList = driver.findElements(by);

       for(WebElement e:elementList){

           if(e.getText().contains(text)){

               e.click();

               break;

           }

       }    

    }

   

    protectedStringgetLinkUrlContainingText(By by, String text){

       List<WebElement>subscribeButton = driver.findElements(by);

       String url = null;

       for(WebElement e:subscribeButton){

           if(e.getText().contains(text)){

               url =e.getAttribute("href");

               break;

           }

       }

       return url;

    }

   

    protected voidclick(Byby){

       driver.findElement(by).click();

       driver.manage().timeouts().implicitlyWait(TestConstant.WAIT_ELEMENT_TO_LOAD,TimeUnit.SECONDS);

    }

 

    protectedStringgetLinkUrl(By by){

       return driver.findElement(by).getAttribute("href");

    }

   

    protected voidsendKeys(Byby, String value){

       driver.findElement(by).sendKeys(value);

    }

 

小结:

 

按照上面的例子你可以对各个方法进行封装,使自己的代码更加简洁!

 

selenium2.0中使用selenium1.0API

 

Selenium2.0中使用WeDriver API对页面进行操作,它最大的优点是不需要安装一个selenium server就可以运行,但是对页面进行操作不如selenium1.0Selenium RC API那么方便。Selenium2.0提供了使用Selenium RC API的方法:

//我用火狐浏览器作为例子

WebDriver driver = newFirefoxDriver(); 

 String baseUrl="http://www.google.com"; 

Selenium selenium = newWebDriverBackedSelenium(driver, baseUrl);

 

//执行selenium命令

selenium.open("http://www.google.com");

selenium.type("name=q","cheese");

selenium.click("name=btnG");

 

WebDriver driverInstance = ((WebDriverBackedSelenium)selenium).getUnderlyingWebDriver();

 

selenium.stop();

 

我分别使用WebDriver APISeleniumRC API写了一个Login的脚本,很明显,后者的操作更加简单明了。

WebDriver API写的Login脚本:

    public void login() {

       driver.switchTo().defaultContent();

       driver.switchTo().frame("mainFrame");

 

       WebElement eUsername= waitFindElement(By.id("username"));

       eUsername.sendKeys(manager@ericsson.com);

 

       WebElement ePassword= waitFindElement(By.id("password"));

       ePassword.sendKeys(manager);

 

       WebElementeLoginButton = waitFindElement(By.id("loginButton"));

       eLoginButton.click();

 

    }

   

SeleniumRC API写的Login脚本:

    public void login() {

       selenium.selectFrame("relative=top");

       selenium.selectFrame("mainFrame");

       selenium.type("username","manager@ericsson.com");

       selenium.type("password","manager");

       selenium.click("loginButton");

}

 


TAG:

 

评分:0

我来说两句

Open Toolbar