使用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"));
答案 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编写自己的实现,并且可以将它们与测试数据一起使用。