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

2024-03-14

使用 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"));

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

这可能会帮助你作为例子 -https://github.com/SeleniumHQ/selenium/tree/master/java/client/src/org/openqa/selenium/support/events https://github.com/SeleniumHQ/selenium/tree/master/java/client/src/org/openqa/selenium/support/events。你可以检查EventFiringWebDriver它也像代理一样工作并创建代理EventFiringWebElement目的。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Selenium,是否可以创建一个模拟 WebElement 以在单元测试中使用? 的相关文章

随机推荐