Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用mockito来模拟webdriver?_Java_Selenium_Webdriver_Mockito - Fatal编程技术网

Java 如何使用mockito来模拟webdriver?

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.

我希望能够为我的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.NullPointerException
getName()中返回的

我显然用错了,但我不知道怎么用。在这方面有经验的人能给我指出正确的方向吗?

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

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
)。