【问题标题】:How to initialize a driver object so it can be used by all classes如何初始化驱动程序对象,以便所有类都可以使用它
【发布时间】:2020-08-13 01:54:56
【问题描述】:

如何初始化驱动程序,以便所有类都可以使用它

大家好,

我正在使用 Appium、Selenium 和 Cucumber 在 JAVA 中编写测试自动化框架。

我首先在我的一个测试步骤文件中声明一个 Appium 驱动程序,然后根据被测应用程序将其转换为 Android 驱动程序或 iOS 驱动程序。

我需要一些帮助 - 我需要我的所有类文件才能访问此驱动程序实例,但我不知道该怎么做。测试是从功能文件驱动的,并且一些测试步骤在不同的类文件中,那么它们如何都访问该驱动程序实例?

谢谢 马特

【问题讨论】:

标签: java appium serenity-bdd cucumber-serenity serenity-js


【解决方案1】:

您可以在可以完成所有其他配置设置的类中创建一个初始化方法,然后您可以创建该类的一个实例来调用 getDriver 方法。
例如:

public class initialiseDriver{
private static AppiumDriver<MobileElement> driver;

public AppiumDriver<MobileElement> getDriver() throws IOException {
if (PLATFORM_NAME.equals("Android")) {
    // setup the android driver
} else if (PLATFORM_NAME.equals("iOS")) {
    // setup the ios driver
}
return driver;
  }
}

您可以在要使用驱动程序的地方调用此方法。理想情况下,您应该通过在@BeforeSuite/@BeforeClass 方法中调用此方法来初始化驱动程序,这样您就不需要每次启动脚本时都调用此方法,因为它会被@BeforeSuite/@BeforeClass 隐式调用。

【讨论】:

    【解决方案2】:

    您可以将您的 AppiumDriver 定义为静态

    public class AppiumHelper(){
       public static AppiumDriver<MobileElement> driver;
    
       public void setupDriver(){
           //define your DesiredCapabilities       
    
           //initialize your driver
    
      }
    

    然后你可以在你的测试方法中使用你的驱动程序

    public void test1(){
           MobileElement element= AppiumHelper.driver.findElementById("elements id");
    
    }
    

    【讨论】:

      【解决方案3】:

      serenity PageObject 类提供了一个内置的 getDriver() 方法,您可以调用该方法来初始化驱动程序(最好在测试类)。避免尝试在任何步骤定义/步骤库中初始化驱动程序(使用@Managed 注解进行管理),否则它会抛出:

      空指针异常

      【讨论】:

        猜你喜欢
        • 2014-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-12
        • 2011-11-25
        • 1970-01-01
        • 2020-09-17
        • 2017-02-24
        相关资源
        最近更新 更多