使用Selenium,是否可以创建一个模拟WebElement以用于单元测试?

时间:2015-01-23 00:32:14

标签: selenium selenium-webdriver

使用Selenium,是否可以创建一个虚拟WebElement以用于单元测试?

@Test
public void testIt() {
  JavascriptExecutor js = (JavascriptExecutor) driver;
  WebElement we = (WebElement)js.executeScript("code to create and return a input element");
  assertTrue("default value", we.getText()); 
}

我考虑过使用Spy或Mock对象,但WebElement没有任何“setter”方法,所以一旦我创建了一个WebElement实例,我就不知道如何给它赋值。

例如,是否可以将HtmlUnit Web元素转换为Selenium WebElement(包含属性)?

 final String html = "<html><head></head><body id='tag'><b>text</b></body></html>";
 final HtmlPage page = loadPage(html);
 final HtmlUnitWebElement node = page.getHtmlElementById("tag"); 
 WebElement we = node.findElement(By.xpath(".//b"));

1 个答案:

答案 0 :(得分:1)

您可以编写具有自己实现的代理类。我不知道Java Selenium,但是.Net Selenium有PageObjectFactory使用的代理WebDriver,这个代理WebDriver返回以懒惰方式工作的代理WebElement类 - 它在第一次访问该对象时进行初始化。

这可能会对您有所帮助 - https://github.com/SeleniumHQ/selenium/tree/master/java/client/src/org/openqa/selenium/support/events。您也可以检查EventFiringWebDriver,它也像代理一样工作,并创建代理EventFiringWebElement对象。

因此,您可以为具有setter的WebElement编写自己的实现,并且可以将它们与测试数据一起使用。

相关问题