如何将 selenium webdriver 实例传递给另一个类

新手上路,请多包涵

我浏览了该网站,但没有找到我正在寻找的答案。

我有

  1. 超基类-在这里我只是创建一个网络驱动程序的对象
  2. 基类——在这个类中,我扩展了 Superbase 类,调用了驱动程序,并打开了 URL。
  3. Clicklink 类——在这个类中,我再次扩展了 Superbase 类,但只发现了一个空指针异常。我想我遇到了异常,因为驱动程序对象未初始化。

我只是一个初学者,还没有尝试过 browserfactory 和其他选项,因为我想从简单的流程开始。

超类

    Public class Superclass
    {
public webdriver Driver;
}

基类

public class Baseclass extends Superclass
{
setting capabilities and launching the browser
}

点击链接

public class Clicklink extends Superclass
{
here I want to click on a link
driver.findelement(by.xpath("xpath").click());
// after this statement I get a null pointer exception
}

你能在这里指导我吗?我怎样才能达到同样的效果。

非常感谢!

原文由 Ashwin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 572
2 个回答

这是我这边所做的很多猜测,但请确保您的超类确实设置了驱动程序并将其返回。你实际上可以用两种方法来实现它:

 public class Superclass
{
  public WebDriver driver;
  public Superclass(){
    driver = new FirefoxDriver();
  }
  public WebDriver getdriver(){
    if (driver == null){
      driver = new FirefoxDriver();
      return driver;
    }else{
      return driver;
    }
  }
}

稍后在您调用它的方法中:

 public class Clicklink extends Superclass
{

getdriver().findelement(by.xpath("xpath").click());

}

原文由 Pavel Janicek 发布,翻译遵循 CC BY-SA 3.0 许可协议

SuperClassBaseClass 是非常糟糕的名字。不要使用编码语言来命名你的类使用问题的语言。在这种情况下,网站应用程序测试,使用 LoginPage、CartPage、ProfilePage 等。使用 Page Object Pattern

我建议您使用工厂模式为每个测试提供 WebDriver 的实例。由于所有符合这个想法 的都是 page ,因此使用标准 PageObject 的类扩展来提供此功能。导航时,让当前页面构造新页面的实例并将当前 webDriver 连接实例传递给它。然后,您应用于该 PageObject 的任何操作都将自动应用于该 webDriver 实例及其关联的浏览器实例。您还应该使用 PageFactory 来提供 pageObject 的实例。

 public abstract class PageObject {
    public WebDriver driver;
    PageObject() {
        // Page can initialise its self
        this.driver = BrowserFactory.webDriver();
    }
    PageObject(final WebDriver webDriver) {
        this.driver = webDriver;
        }
    }

原文由 Martin Spamer 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题