在使用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);
我是否可以更多地改进它,例如,如果我可以避免每次都传递驱动程序对象,或者更多的东西?
答案 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 ..