为了账号安全,请及时绑定邮箱和手机立即绑定

在带有Java的Selenium中使用@Factory注释后无法运行测试

在带有Java的Selenium中使用@Factory注释后无法运行测试

MYYA 2022-08-03 15:45:22
这是我的类的结构:package com.gex.base.helper;public class InitializeDriver extends BrowserFactory {    HashMap<String, String> authenticationMap;    @Factory(dataProvider="authentication", dataProviderClass=DataProviderList.class)    public InitializeDriver(String userName, String uPassword)    {        authenticationMap=new HashMap<String, String>();        authenticationMap.put("UserName", userName);        authenticationMap.put("Password", uPassword);    }    @BeforeTest     public void Gexlogin()       {          LoginPF objLogin=PageFactory.initElements(BrowserFactory.driver, LoginPF.class);           System.out.println("Logging into GEx");           objLogin.loginToDGEx(authenticationMap.get("UserName"), authenticationMap.get("Password"));          System.out.println("Successfully Logged into GEx");    }    @AfterTest    public void directLogout(){        // logout from application        LogoutPF objLogoutTest = PageFactory.initElements(BrowserFactory.driver, LogoutPF.class);        objLogoutTest.LogOffGEx();        extent.flush();        driver.close();    }}LoginToGEx是另一个类中的函数,例如:public void loginToGEx(String strUsername, String strPassword){    username.sendKeys(strUsername)    password.sendKeys(strPassword);    loginButton.click();    System.out.println("Successfully Logged into GEx");}DataProviderClasspublic class DataProviderList {    @DataProvider(name="authentication")    public static Object[][] authentication()    {        return new Object[][] {            {"abc", "123"},             {"xyz", "456"},            };    }}
查看完整描述

1 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

它不起作用,因为您使用批注对构造函数进行了批注,然后使用了继承。@Factory


要保留继承等,您应该用SampleTest@Factory


喜欢这个:



public class SampleTest extends InitializeWebDriver {

    private String userName, password;


    @Factory(dataProvider="authentication", dataProviderClass=DataProviderList.class)

    public SampleTest(String userName, String password) {

        super(userName, password)

    }

}



public class InitializeDriver extends BrowserFactory {

    private String userName, password;


    public InitializeDriver(String userName, String uPassword)

    {

        this.userName = userName;

        this.password = password;

    }


}

这将导致将参数从 DataProvider 传递到您的类,并将其另存为实例变量。@FactoryInitializeDriver


然后,您可以使用这些变量,就像在您的方法中一样:@BeforeTest


@BeforeMethod

public void Gexlogin() {

     LoginPF objLogin=PageFactory.initElements(BrowserFactory.driver, LoginPF.class);

     System.out.println("Logging into GEx");

     objLogin.loginToDGEx(userName, password); //changed to instance variables

     System.out.println("Successfully Logged into GEx");

}

编辑:该方法只会执行一次,因为TestNG将测试视为单个测试用例!如果要在每次测试之前登录,则需要使用@BeforeTest@Factory@BeforeMethod


查看完整回答
反对 回复 2022-08-03
  • 1 回答
  • 0 关注
  • 97 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信