【问题标题】:Selenium TestNG @DataProvider runtime valueSelenium TestNG @DataProvider 运行时值
【发布时间】:2017-02-03 21:52:18
【问题描述】:

我正在创建一个 Selenium 框架,它使用带有 TestNG 的 POM 结构。我正在使用@DataProvider 注释将值传递给@Test。

我的问题是,如果一个@Test 方法的输出需要在以后使用@Test 方法,那么我将如何做到这一点,因为使用数据提供者我只能传递它包含的值。

【问题讨论】:

  • pom 框架?我认为你的意思是 Maven :)
  • 我个人已经在这个网站上回答了几个问题,答案都是一样的。不要让你的测试相互依赖。想办法让它们自给自足。
  • 嗨 sircapsalot,它的 POM 不是 Maven

标签: java selenium testng


【解决方案1】:

OP 没有提及语言或需要并行执行,因此可以使用静态变量轻松解决。在 Java 中,下面应该打印 pass:

public static int outputOfMethodA=0;

@Test
   methodA(){
   outputOfMethodA=outputOfMethodA+1;
}

@Test
methodB(){
   if(outputOfMethodA=1){
   System.out.println("pass!");
   }
   else{system.out.println("fail!")
   }
}

【讨论】:

    【解决方案2】:

    他的意思是 POM 是他的 WebElements 的页面对象模型类型的映射。

    松散地耦合您的测试方法始终是一个好习惯(因此一个@Test 的结果不应依赖于另一个@Test)。

    如果您想实现它:@DataProvider 可以用于您在测试类中拥有的任意数量的@Test 方法。只需定义一个类级别的 Map 并在您的测试中使用它。

    示例:

    TestingClass{
    
    // define global variable
    Map<String,String> resultMap=new HashMap<String, String>();
    
    @DataProvider
    public Object{
    
    // some logic for dataProvider
    }
    @Test(dataProvider="dp")
    method1(){
    
    //  your logic
    // then put your final result to be used by method2 into appropriate obj               
    
     resultMap.put("key","value");// assign result to defined global variable
    
      }
    
      @Test(dataProvider="dp")
      method2(){
    
      // use the resultMap to take results from previous method.
    
      }
    
    
      }
    

    【讨论】:

    • OP 不是在每个 @Test 方法中使用 dp 之后;而是全局第一种方法的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 2016-12-09
    相关资源
    最近更新 更多