【问题标题】:Using Selenium, is it possible to create a mock WebElement to use in a unit test?使用 Selenium,是否可以创建一个模拟 WebElement 以在单元测试中使用?
【发布时间】:2015-01-23 00:32: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"));

【问题讨论】:

  • 我开始认为没有真正的理由这样做?
  • 我正在尝试验证我的 Selenium-based-scraper 并且正是需要这个(我认为)。您找到解决方案或替代方案了吗?

标签: selenium selenium-webdriver


【解决方案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 对象。

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

【讨论】:

  • 哇,这看起来很复杂。我会考虑的。
猜你喜欢
  • 2010-11-21
  • 2015-05-04
  • 2015-02-21
  • 2021-10-27
  • 2012-05-14
  • 1970-01-01
  • 2010-10-25
  • 2023-03-06
  • 1970-01-01
相关资源
最近更新 更多