Java 如何使用mockito来模拟webdriver?
我希望能够为我的Selenium集成测试进行单元测试,并且要做到这一点,我需要能够模拟测试所需的驱动程序和元素,这是一个返回元素名称的函数的快速示例Java 如何使用mockito来模拟webdriver?,java,selenium,webdriver,mockito,Java,Selenium,Webdriver,Mockito,我希望能够为我的Selenium集成测试进行单元测试,并且要做到这一点,我需要能够模拟测试所需的驱动程序和元素,这是一个返回元素名称的函数的快速示例 public class demo { private WebDriver mockDriver; private WebElement mockElement; @Before public void setUp(){ this.mockDriver = mock(WebDriver.class); this.
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()
子句为mock对象提供了一个名称,这意味着Mockito生成的某些错误消息将使用该名称。您没有在WebElement
对象上设置任何属性
所以。。。当代码到达此部分时:
return testElement.getAttribute("name");
它返回null,因为没有具有该值的属性。如果您想拥有一个属性,则需要添加如下内容:
when(this.mockElement.getAttribute("name")).thenReturn("elementName");
你究竟为什么要嘲笑网络驱动程序?我不理解你对“单元测试[ing]我的Selenium集成测试”的评论,因为我想确保我使用webdriver的函数是正确的。就像在本例中一样,如果没有模拟驱动程序返回预定义元素,则无法测试函数getName。所以我必须用“when”子句来构建我的元素@user2968166是的,任何模拟对象都是用一系列when
子句来定义行为的。如果没有when
子句,Mockito将返回默认值(例如false
,0
,null
)。