selenium - 我们可以在 testng.xml 的方法级别传递参数或任何属性吗?

标签 selenium testing appium

//测试xml

<test name="Test1" preserve-order ="true">
        <parameter name="deviceName_" value="aaaa"/>
<classes>
        <class name="Test">
                <methods>
<include name="methodName"/>

            </methods>  
            </class>  
        </classes>
</test> 

//我可以像在测试级别传递 deviceName 那样在方法级别传递参数吗

最佳答案

实际上,方法级别的参数是存在的。这是一个例子:

<suite name="my-suite" verbose="1">
    <test name="my-test">
        <classes>
            <class name="testng.ex1.TestParams">
                <methods>
                    <include name="m1">
                        <parameter name="key1"  value="val1"/>
                        <parameter name="key2"  value="val2"/>
                    </include>
                    <include name="m2">
                        <parameter name="key1"  value="valA"/>
                        <parameter name="key2"  value="valB"/>
                    </include>
                </methods>
            </class>
        </classes>
    </test>
</suite>

测试类是,

package testng.ex1;

import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class TestParams {

    @Test
    @Parameters({ "key1", "key2" })
    public void m1(String key1, String key2) throws Exception {
        System.out.println(key1 + ", " + key2);
    }

    @Test
    @Parameters({ "key1", "key2" })
    public void m2(String key1, String key2) throws Exception {
        System.out.println(key1 + ", " + key2);
    }
}

另一种方法是使用从 testng.xml 获取 key 的数据提供程序。参见示例:

<suite name="my-suite" verbose="1">
    <test name="my-test">
        <classes>
            <parameter name="keys" value="key1,key2,key3,key4" />
            <class name="testng.ex2.TestParams" />
        </classes>
    </test>
</suite>

测试类,

package testng.ex2;

import java.util.Arrays;
import java.util.List;

import org.testng.ITestContext;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class TestParams {

    @Test(dataProvider = "dp")
    public void m1(Employee e) throws Exception {
        System.out.println("name: " + e.getName() + ", age: " + e.getAge());
    }

    @DataProvider(name = "dp")
    @Parameters("keys")
    public Object[][] createData(ITestContext ctx) {
        String keysString = ctx.getCurrentXmlTest().getLocalParameters().get("keys");
        List<String> keys = Arrays.asList(keysString.split(","));

        Object[][] result = new Object[keys.size()][1];
        for (int i = 0; i < keys.size(); i++) {
            String key = keys.get(i);
            result[i] = new Object[] { new Employee(key) };
        }
        return result;
    }
}

员工类,

package testng.ex2;

public class Employee {

    private final String name;
    private final int age;

    public Employee(String key) {
        // use 'key' to lookup employee in database
        name = key + "_name"; // dummy value
        age = 41; // dummy value
    }

    String getName() {
        return name;
    }

    int getAge() {
        return age;
    }
}

你可以在 before 方法中获取参数,如下所示,

@BeforeMethod
@Parameters({ "key1", "key2" })
public void beforem1(String key1, String key2){
    System.out.println(key1 + ", " + key2);
}

关于selenium - 我们可以在 testng.xml 的方法级别传递参数或任何属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45831904/

相关文章:

java - 无法解析 Appium 中 TapOptions 的符号触摸

python - 查找标题包含文本的 anchor

java - 有没有办法使用 selenium 提取 webElement 的显示名称?

javascript - Protractor 中的 setTimeout 替代方案

html - 从 html 元素获取 data-id

java - 使用 pageRequest 测试 spring 存储库

selenium - 使用基本测试类时的 TestNg 并行测试/类

python - 如何在不同的选项卡/窗口中打开选择标签(下拉)的选项?

java - Appium POM java.lang.NoSuchMethodException : jdk. 代理2.$Proxy15.proxyClassLookup()

java - 在真实设备上的 appium 中并行运行