0

I am trying to automate a web application for multiple browser testing. I am trying to integrate some spring features but finding a bit of dificulties. Here is my code :

On DriverInitialize.java :

package com.initialization;

import org.openqa.selenium.WebDriver;

public class DriverInitialization {

    private WebDriver webDriver;

    public void setWebDriver(WebDriver webDriver) {
        this.webDriver = webDriver;
    }

    public WebDriver getWebDriver() {
        return webDriver;
    }
}

On Start.java

package com.initialization;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;

public class Start {
    public static Properties properties;

    public static void loadProperties() {
        properties = new Properties();

        try {

            properties.load(new FileReader("src/com/properties/driver.properties"));
            properties.load(new FileReader("src/com/properties/driverpath.properties"));

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static Properties getAllProperties() {
        return properties;
    }

    public static String getProperty(String property) {
        return properties.getProperty(property);
    }
}

On BrowserTest.java :

package com.tests;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

import com.initialization.DriverInitialization;
import com.initialization.Start;

public class BrowserTest {
    private ApplicationContext context;
    private DriverInitialization driverInit;
    @Parameters("browser")
    @BeforeClass
    public void beforeClass(String browser) {
        System.out.println("Browser : " + browser);
        Start.loadProperties();
        System.setProperty(Start.getProperty("driver." + browser), Start.getProperty("driverpath." + browser));

        System.out.println(Start.getAllProperties());

        context = new ClassPathXmlApplicationContext("com/driversetup/driversetup.xml");
        driverInit = (DriverInitialization) context.getBean(browser);
    }

    @Test
    public void test() {
        System.out.println(driverInit.getWebDriver());
    }

    @AfterClass
    public void AfterClass() {
        System.out.println("After Class ....");
    }

}

On driversetup.xml :

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">

    <bean id="chrome" class="org.openqa.selenium.chrome.ChromeDriver" lazy-init="true"/>
    <bean id="firefox" class="org.openqa.selenium.firefox.FirefoxDriver" lazy-init="true" />
    <bean id="ie" class="org.openqa.selenium.ie.InternetExplorerDriver" lazy-init="true" />

</beans>

On startup.xml :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="none">
    <test name="ChromeTest">
        <parameter name="browser" value="chrome" />
        <classes>
            <class name="com.tests.BrowserTest" />
        </classes>
    </test>
</suite>

On driverpath.properties :

driverpath.chrome=drivers/chromedriver.exe
driverpath.firefox=drivers/geckodriver.exe
driverpath.ie=drivers/IEDriverServer.exe

On driver.properties :

driver.chrome=webdriver.chrome.driver
driver.firefox=webdriver.gecko.driver
driver.ie=webdriver.ie.driver

When I execute this from startup.xml I get the error on TestNG report :

java.lang.ClassCastException: org.openqa.selenium.chrome.ChromeDriver cannot be cast to com.initialization.DriverInitialization
    at com.tests.BrowserTest.beforeClass(BrowserTest.java:26)
... Removed 25 stack frames
0

1 Answer 1

1

You can not cast from a Driver Class to DriverInitialization.

You have to use your setter method:

 driverInit = new DriverInitialization();
 driverInit.setWebDriver(context.getBean(browser));
Sign up to request clarification or add additional context in comments.

1 Comment

I tried : driverInit = new DriverInitialization(); driverInit.setWebDriver(context.getBean(browser)); : and it worked.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.