简体   繁体   中英

Selenium : Unable to identify object using data provider

Beginner in this space, appreciate your help on the problem!

I'm trying to script a path

Login create new user log out

Login method works fine Create user is dependent on Login method to be completed, using data providers and post login to create new user

Issue is after logging in the elements/objects in create user class are not identified. I have tried it using different element finders and browsers. Appreciate if you help around

Project Structure is Project Package1 Logindataprovider.class newaccountDataProvider.class Package2 LoginpageObjects.class NewAccountPageObjects.class Package3 LoginTestscripts.class NewAccountTestScript.class

LoginTestscripts- Class

LoginPageObjects LgnObj = new LoginPageObjects();
@Test(groups = { "Logingroup1" }, dataProvider = "LoginCred", dataProviderClass = LoginDataProviders.class)
public void mytest(String DDUname, String DDpwd,String ExpLoginPage, int Browsertype) {

        LgnObj.setBrowser(Browsertype);

        Logger log = Logger.getLogger(LoginDataProviders.class);
        log.info("Login To application method");

        LgnObj.init();

        // Login page assertion actual values
        String LoginPageAssertactual = LgnObj.LoginPageAssertionActual();

        //Login page assertion
        Assert.assertEquals(LoginPageAssertactual, ExpLoginPage);

        //login to application
        LogginCommonProcess(DDUname, DDpwd, LgnObj);

    }

    public void LogginCommonProcess(String DDUname, String DDpwd,
            LoginPageObjects LgnObj) {

        LgnObj.enterUserName(DDUname);
        LgnObj.enterPassword(DDpwd);

        LgnObj.Loginbtn();
        LgnObj.enterPIN();
        LgnObj.CompanyName();

    }

Logindataprovider- Class
public class LoginPageObjects {

    WebDriver driver;

    public void setBrowser(int type) {
        if (type == 1) {
            driver = new FirefoxDriver();
        } else if (type == 2) {
            String path = ClassLoader.getSystemResource("chromedriver.exe")
                    .getPath();
            System.setProperty("webdriver.chrome.driver", path);
            driver = new ChromeDriver();
        } else if (type == 3) {
            String path = ClassLoader.getSystemResource("IEDriverServer.exe")
                    .getPath();
            System.setProperty("webdriver.ie.driver", path);
            driver = new InternetExplorerDriver();
        }
    }

    public void init() {
        driver.manage().window().maximize();
        driver.navigate().to("https://test2.qatest.com/Login.aspx");
        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
    }

    public String LoginPageAssertionActual() {
        String LoginPageAssertionact = driver.findElement(By.tagName("h1"))
                .getText();
        return LoginPageAssertionact;
    }

    public void enterUserName(String DDUname) {

        driver.findElement(By.id("ctl00_MainContent_usernameField")).sendKeys(
                DDUname);
    }

    public void enterPassword(String DDpwd) {
        driver.findElement(By.id("ctl00_MainContent_passwordField")).sendKeys(
                DDpwd);
    }

New User- page object
public class NewUser {

    WebDriver driver;

    public void setup() {
        System.out.println("Start here");
        System.setProperty("webdriver.ie.driver", "C:\\IEDriverServer.exe");
        driver = new InternetExplorerDriver();
        driver.manage().window().maximize();

        driver.navigate().to("https://test2.directorsdesk.com/Login.aspx");

        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
    }

    public void setBrowser(int type) {
        if (type == 1) {
            driver = new FirefoxDriver();
        } else if (type == 2) {
            String path = ClassLoader.getSystemResource("chromedriver.exe")
                    .getPath();
            System.setProperty("webdriver.chrome.driver", path);
            driver = new ChromeDriver();
        } else if (type == 3) {
            String path = ClassLoader.getSystemResource("IEDriverServer.exe")
                    .getPath();
            System.setProperty("webdriver.ie.driver", path);
            driver = new InternetExplorerDriver();
        } else if (type == 4) {
            DesiredCapabilities cap = DesiredCapabilities.chrome();
            cap.setBrowserName("chrome");
            cap.setVersion("38");
            cap.setPlatform(Platform.WINDOWS);
            try {
                driver = new RemoteWebDriver(new URL(
                        "http://127.0.0.1:4444/wd/hub"), cap);
            } catch (MalformedURLException e) {
                // log erro unable to access remote system, running in local
                // firefox
                driver = new FirefoxDriver();

            }
        }
    }

    **public void ManageSystem() {
        driver.findElement(By.partialLinkText("Manage System")).click();
        driver.findElement(By.linkText("Manage System")).click();

    }**

public class NewAccount {

    @Test(dataProvider = "UserDetails", dataProviderClass = LoginDataProviders.class, dependsOnGroups = "Logingroup1")
    public void CreateNewAccount(String Emailid, String Firstname,
            String Lastname, String PrimaryEmailid, int browserType) {

        NewUser NewUserObj = new NewUser();
        NewUserObj.setBrowser(browserType);
        **NewUserObj.ManageSystem();** // Fails here
        NewUserObj.UserAccounts();
        NewUserObj.NewUserAccount();
        NewUserObj.Emailid(Emailid);
        NewUserObj.UserFirstname(Firstname);
        NewUserObj.UserLastname(Lastname);
        NewUserObj.PrimaryEmai(PrimaryEmailid);
        NewUserObj.SaveAccountSettings();

        LoginPageObjects LgnPgObj = new LoginPageObjects();
        LgnPgObj.Logout();
        LgnPgObj.closeBrowser();

    }

Have you tried this:

public void entityFieldIsEntered(String field, String value)  {
    WebElement valueElem = new SharedDriver().findElement(By.xpath("(.//*[text()='" + field
            + ":'])[2]/parent::*/span/input"));
    valueElem.sendKeys(new CharSequence[] { value });

}

assuming you are using input wrapper in your html. This code search for text label on the screen, then goes to its parent and navigate to input field.

If you are going to use multiple page objects in one test, you will need to share the same driver between those page objects. Try creating a separate setupDriver class and have each page object take a driver parameter to be constructed. At the beginning of each test setup the driver, then pass in the driver as you create each object.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM