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 ITestResult不';t从XML套件返回参数_Java_Selenium_Testng - Fatal编程技术网

Java ITestResult不';t从XML套件返回参数

Java ITestResult不';t从XML套件返回参数,java,selenium,testng,Java,Selenium,Testng,我一直在尝试从TestNG XML套件中检索一些参数。带有testrail引用的参数被附加到xml套件,这些套件被认为因已知错误而失败。 我希望在生成的报告中包含此参数(我们使用范围报告)。我尝试了多种从xml套件中检索参数的方法,但返回的参数数始终为零 我尝试使用ITestContext从xml文件检索数据 完成测试后,在一个侦听器中调用flush()方法,并接受ITestContext参数。我正在尝试从提供的ITestContext参数中检索参数 public void flush( I

我一直在尝试从TestNG XML套件中检索一些参数。带有testrail引用的参数被附加到xml套件,这些套件被认为因已知错误而失败。 我希望在生成的报告中包含此参数(我们使用范围报告)。我尝试了多种从xml套件中检索参数的方法,但返回的参数数始终为零

我尝试使用ITestContext从xml文件检索数据

完成测试后,在一个侦听器中调用flush()方法,并接受ITestContext参数。我正在尝试从提供的ITestContext参数中检索参数

  public void flush( ITestContext testContext ) {

Map<String, String> parameters = ( ( (ITestContext) testContext ).getCurrentXmlTest() )
      .getAllParameters();

    for ( Map.Entry<String, String> entry : parameters.entrySet() ) {
      warn( "testrail_case_id: " + entry.getKey() + " (id): " + entry.getValue() );
    }
    extent.flush();
}
public void flush(ITestContext-testContext){
映射参数=((ITestContext)testContext.getCurrentXmlTest())
.getAllParameters();
for(Map.Entry:parameters.entrySet()){
警告(“testrail\u case\u id:+entry.getKey()+”(id):“+entry.getValue());
}
expndure.flush();
}
这是xml套件的一个示例,在这个示例中,我们指定了一个参数(有时是几个参数),并引用了一个bug通知单。更具体地说,我试图检索一个参数名为testrail\u case\u id的变量

<suite name="MySuite" parallel="false" thread-count="1"
       junit="false" verbose="1">

  <listeners>
    <listener class-name="MyListener"/>
  </listeners>

  <test name="MyTest">
    <parameter name="testrail_case_id" value="684342"/>
    <classes>
      <class name="MyTestClass"/>
    </classes>
  </test>
</suite>

问题是
映射参数=((testContext).getCurrentXmlTest()).getAllParameters()始终返回零个参数(非空)


如何从xml套件中检索具有
testrail\u case\u id
的参数?

如果只想获取一个参数而不是映射,请尝试

  String browser = context.getCurrentXmlTest().getParameter("Browser");

这对我来说很好

我试图重现你的问题。我用TestNG和一套xml创建了一个新的空项目。我创建了两个配置,一个直接运行类,另一个通过套件运行测试结果是,当您直接运行类时,getAllParameters()返回零,而当通过套装xml运行时,返回参数。

我猜您的配置可能是直接运行类,或者如果选择了suit,它会绕过或无法访问suit文件(不太可能)。

当我尝试获取诉讼文件名时,得到了以下结果:

直接运行类:C:\Users****\AppData\Local\Temp\testng-eclipse-300667166\testng-customsuite.xml

运行Suit:D:\eclipse-workspace2\TestNGExamples\src\tester,因此,如果配置未设置为使用特定的Suit文件,它将使用临时创建的Suit xml

示例代码:

import org.testng.annotations.Test;
import org.testng.annotations.BeforeTest;

import java.util.Map;

import org.testng.ITestContext;
import org.testng.annotations.AfterTest;

public class MyFirstTest {
  @Test
public void f(ITestContext testContext) {
  Map<String, String> parameters = ( ( (ITestContext) testContext     ).getCurrentXmlTest() )
          .getAllParameters();
  System.out.println("file name : " +( ( (ITestContext) testContext ).getCurrentXmlTest() ).getSuite().getFileName() );
  System.out.println("parameters size "+parameters.size() );

  for ( Map.Entry<String, String> entry : parameters.entrySet() ) {
      System.out.println( "testrail_case_id: " + entry.getKey() + " (id): " + entry.getValue() );
    }
}
@BeforeTest
public void beforeTest() {
}
@AfterTest
public void afterTest() {
}
}
import org.testng.annotations.Test;
导入org.testng.annotations.BeforeTest;
导入java.util.Map;
导入org.testng.ITestContext;
导入org.testng.annotations.postest;
公共类MyFirstTest{
@试验
公共void f(ITestContext testContext){
映射参数=((ITestContext)testContext.getCurrentXmlTest())
.getAllParameters();
System.out.println(“文件名:”+((ITestContext)testContext.getCurrentXmlTest()).getSuite().getFileName());
System.out.println(“参数大小”+参数大小());
for(Map.Entry:parameters.entrySet()){
System.out.println(“testrail\u case\u id:+entry.getKey()+”(id):“+entry.getValue());
}
}
@试验前
测试前公共无效(){
}
@事后
公开无效后验(){
}
}
以下是显示代码、xml文件、配置及其相应输出的合成屏幕截图:

我不知道您的问题与下面问题中讨论的内容是否有任何关系:似乎有一个答案建议调用“((TestRunner)context.getTest()).getParameters();”来获取参数。根据您的TestNG版本,您是否可以尝试看看它是否有效。谢谢。尝试似乎不起作用,我看到了:/我正在检查文档和示例项目。如果我发现了什么,我会在这里发表评论。你好,我又一次试图重现你的问题。我用TestNG和一套xml创建了一个新的空项目。创建了两个配置,一个直接运行类,另一个通过套件运行测试。结果是,当您直接运行该类时,getAllParameters()返回零,当您运行整个xml时,返回参数。您可以在下面的链接上看到合成ss的结果。我的猜测是,不知何故,您的配置要么直接运行类,要么如果选择了suit,它就会绕过或无法访问suit文件(不太可能):附录:当我尝试获取suit文件名时,得到了以下结果:直接运行类:C:\Users****\AppData\Local\Temp\testng-eclipse-300667166\testng-customsuite.xml在suit中运行:D:\eclipse-workspace2\TestNGExamples\src\tester因此,如果配置未设置为使用特定的套装文件,它将使用临时创建的套装xml。