我可以改进我的包装方法吗?

时间:2011-07-31 06:20:25

标签: java

在使用Selenium 2时,我在测试方法中散布了以下语句 -

 driver.findElement(By.name(usernameBox)).sendKeys(userEmailAddress);

我想在WebUtil类的静态方法中抽象它们 -

 public class WebUtils {

    public static void type(WebDeriver driver, String locator, String testData) {
         driver.findElement(By.name(locator)).sendKeys(testData);

    }
 }

方法调用将是 -

  WebUtils.type(driver, usernameBox, userEmailAddress);

我是否可以更多地改进它,例如,如果我可以避免每次都传递驱动程序对象,或者更多的东西?

3 个答案:

答案 0 :(得分:1)

我实际上更喜欢原始示例中的fluent interface

我错了,WebElement没有流畅的界面。 sendKeys返回void。尽管如此,原始界面上的静态包装似乎是不必要的。

答案 1 :(得分:1)

如果WebDriver每次都相同,那么你可以将它作为WebUtils类的一部分,如下所示:

private final static WebDriver driver = new WebDriver();

然后使用:

public class WebUtils {

    public static void type(String locator, String testData) {
         driver.findElement(By.name(locator)).sendKeys(testData);
    }
 }

这是我能看到的唯一优化。

答案 2 :(得分:0)

我建议您扩展一般使用的基类,并在那里添加扩展方法。

这是一个扩展Selenium类的例子。

public class MySelenium : WebDriverBackedSelenium
{
        public IWebDriver Driver { get; set; }

        public ISelenium Selenium { get; set; }


        public MySelenium(IWebDriver baseDriver, string baseUrl)
            : base(baseDriver, baseUrl)
        {
            Driver = baseDriver;
        }

        public MySelenium(IWebDriver baseDriver, Uri baseUrl)
            : base(baseDriver, baseUrl) { }

        public static void type(String locator, String testData) {
         Driver.findElement(By.name(locator)).sendKeys(testData);

    }

}

您可以在所有测试使用的公共类中按如下方式初始化它:

var driver =GetDriver(); //method to initialize driver
Selenium= new MySelenium(driver,baseUrl);    //Selenium is a protected variable accessible from your tests

现在您调用类型如下:

 Selenium.type(userNameBox,"username");

P.S:Srry上面的代码在c#中,但你可以把它移植到java ..