如何使用mockito模拟webdriver



我希望能够为我的Selenium集成测试进行单元测试,为此,我需要能够模拟测试所需的驱动程序和元素,这是一个返回元素名称的函数的快速示例。

public class demo {
  private WebDriver mockDriver;
  private WebElement mockElement;
  @Before
  public void setUp(){
    this.mockDriver = mock(WebDriver.class);
    this.mockElement = mock(WebElement.class, withSettings().name("elementName"));
    when(this.mockDriver.findElement(By.id("testmock"))).thenReturn(mockElement);
  }
  public String getName(String id){
    WebElement testElement = mockDriver.findElement(By.id(id));
    return testElement.getAttribute("name");
  }
  @Test
  public void assertElementName() throws InterruptedException {
    Assert.assertTrue(getName("testmock").equals("elementName"));
  }
}

这给了我一个java.lang.NullPointerExceptiongetName()的返回。我显然是用错了,但我不知道是怎么回事。有谁有这方面的经验可以给我指路吗?

您误解了这段代码的作用:

this.mockElement = mock(WebElement.class, withSettings().name("elementName"));

withSettings()子句为模拟对象提供了一个名称,这意味着Mockito产生的某些错误消息将使用这个名称。没有WebElement对象上设置任何属性。

所以…当你的代码到达这部分时:

return testElement.getAttribute("name");

返回null,因为没有该值的属性。如果您想拥有一个属性,那么您需要添加如下内容:

when(this.mockElement.getAttribute("name")).thenReturn("elementName");

相关内容

  • 没有找到相关文章

最新更新