如何阅读<;参数>;这是在<;方法>;在testngxml中?

如何阅读<;参数>;这是在<;方法>;在testngxml中?,xml,selenium,testng,Xml,Selenium,Testng,我正在尝试读取和存储的,它位于和下。我尝试了不同的方法来读取xml,但无法读取“方法和类”下的参数值 我试过了 String parameterName=Reporter.getCurrentTestResult().getTestContext().getCurrentXmlTest().getParameter(“参数名称”) 但是没有运气 如何读取和存储方法参数,即“Iphone”和“Samsung”?下面是一个示例,演示如何获取此值。FWIW,我使用的是最新发布的TestNG版本,即

我正在尝试读取和存储
,它位于
下。我尝试了不同的方法来读取xml,但无法读取“方法和类”下的参数值

我试过了
String parameterName=Reporter.getCurrentTestResult().getTestContext().getCurrentXmlTest().getParameter(“参数名称”)
但是没有运气



如何读取和存储方法参数,即“Iphone”和“Samsung”?

下面是一个示例,演示如何获取此值。FWIW,我使用的是最新发布的TestNG版本,即7.0.0-beta7

import java.util.List;
导入java.util.Optional;
导入org.testng.ITestResult;
导入org.testng.Reporter;
导入org.testng.annotations.Test;
导入org.testng.xml.XmlClass;
导入org.testng.xml.xmlclude;
公共类ReadMethodParameters{
@试验
公共void testMethod(){
ITestResult testResult=Reporter.getCurrentTestResult();
字符串值=extractParameterValue(测试结果,“电话”);
串味精=
字符串格式(
“测试中”,
“Phone”,value,testResult.getTestContext().getName());
系统错误打印项次(msg);
}
私有字符串extractParameterValue(ITestResult testResult,字符串参数名称){
最终字符串methodName=testResult.getMethod().getMethodName();
XmlClass XmlClass=testResult.getTestClass().getXmlClass();
List includedMethods=xmlClass.getIncludedMethods();
可选电流法=
includedMethods.stream()
.filter(xmlclude->xmlclude.getName().equalsIgnoreCase(methodName))
.findFirst();
返回电流法
.地图(
xmlclude->{
字符串值=xmlclude.getAllParameters().get(parameterName);
如果(值==null){
value=xmlClass.getLocalParameters().get(parameterName);
}
返回值;
})
.orElse(空);
}
}
以下是套件xml文件的外观:

...
... TestNG 7.0.0-beta7 by Cédric Beust (cedric@beust.com)
...




<parameter name='Phone' value='iPhone'/> in Test <57484602_Test_1>

<parameter name='Phone' value='Samsung'/> in Test <57484602_Test_2>
PASSED: testMethod

===============================================
    57484602_Test_1
    Tests run: 1, Failures: 0, Skips: 0
===============================================

PASSED: testMethod

===============================================
    57484602_Test_2
    Tests run: 1, Failures: 0, Skips: 0
===============================================





PASSED: testMethod
PASSED: testMethod

===============================================
    57484602_Test_2
    Tests run: 2, Failures: 0, Skips: 0
===============================================


===============================================
57484602_Suite
Total tests run: 2, Passes: 2, Failures: 0, Skips: 0
===============================================


Process finished with exit code 0

以下是输出的样子:

...
... TestNG 7.0.0-beta7 by Cédric Beust (cedric@beust.com)
...




<parameter name='Phone' value='iPhone'/> in Test <57484602_Test_1>

<parameter name='Phone' value='Samsung'/> in Test <57484602_Test_2>
PASSED: testMethod

===============================================
    57484602_Test_1
    Tests run: 1, Failures: 0, Skips: 0
===============================================

PASSED: testMethod

===============================================
    57484602_Test_2
    Tests run: 1, Failures: 0, Skips: 0
===============================================





PASSED: testMethod
PASSED: testMethod

===============================================
    57484602_Test_2
    Tests run: 2, Failures: 0, Skips: 0
===============================================


===============================================
57484602_Suite
Total tests run: 2, Passes: 2, Failures: 0, Skips: 0
===============================================


Process finished with exit code 0
。。。
... Cédric Beust的TestNG 7.0.0-beta7(cedric@beust.com)
...
试验中
试验中
通过:testMethod
===============================================
57484602_测试_1
测试运行:1,失败:0,跳过:0
===============================================
通过:testMethod
===============================================
57484602_测试_2
测试运行:1,失败:0,跳过:0
===============================================
通过:testMethod
通过:testMethod
===============================================
57484602_测试_2
测试运行:2,失败:0,跳过:0
===============================================
===============================================
57484602_套房
运行的测试总数:2,通过:2,失败:0,跳过:0
===============================================
进程已完成,退出代码为0
更新

如果您只有一个
标记,其中有多个
(如下所示)


如果您想读取方法级别的参数,那么下面是如何执行的

private String extracterparametervalue(ITestResult testResult,String parameterName){
最终字符串methodName=testResult.getMethod().getMethodName();
XmlClass XmlClass=testResult.getMethod().getTestClass().getXmlClass();
List includedMethods=xmlClass.getIncludedMethods();
可选电流法=
includedMethods.stream()
.filter(xmlclude->xmlclude.getName().equalsIgnoreCase(methodName))
.findFirst();
可选结果=
currentMethod.map(
xmlclude->{
字符串值=xmlclude.getAllParameters().get(parameterName);
如果(值==null){
value=xmlClass.getLocalParameters().get(parameterName);
}
返回值;
});
if(result.isPresent()){
返回result.get();
}
字符串值=”;
列出类别=
testResult.getTestContext().getCurrentXmlTest().getClasses().stream()
.filter(xmlclas1->xmlclas1.getName().equalsIgnoreCase(xmlClass.getName())
.collect(Collectors.toList());
for(XmlClass每个:类){
value=each.getLocalParameters().get(parameterName);
if(值!=null){
打破
}
}
返回值;
}
在TestNG XML中的
级别的参数是可能的,而且相当简单

我在下面列出了一个供您考虑的示例,但请注意,您原始问题中的一些项目已被省略。这只是为了简洁和突出解决方案的核心

从套件XML开始:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Test">
    <test name="Woohoo">
        <classes>
            <class name="com.kroger.ParametersDemo">
                <methods>
                    <include name="testIPhone">
                        <parameter name="phone" value="iPhone"/>
                    </include>
                    <include name="testSamsung">
                        <parameter name="phone" value="Samsung"/>
                    </include>
                </methods>
            </class>
        </classes>
    </test>
</suite>
有了XML布局,我们可以使用
@Parameters
注释,在任何其他使用XML参数的情况下都可以使用该注释

运行XML,我们将获得以下输出:

Phone for iPhone test is: Iphone
Phone for Samsung test is: Samsung

我不想从克里希南的解决方案中拿走任何东西,但我认为这将使工作更加简单。

非常感谢您提供的解决方案,它成功了。在您的XML中,我看到您有两个标记,我想知道是否有一种方法可以在一个测试中从不同的方法获得参数值。如果您看到我的XML,我有两个方法,它们传递了两个参数。只是一个t