获取错误 - java.lang.ClassCastException:org.openqa.selenium.chrome.ChromeDriver无法强制转换为com.initialization.DriverInitialization

时间:2017-07-03 08:08:01

标签: java spring selenium automation testng

我正在尝试为多个浏览器测试自动化Web应用程序。我试图整合一些弹簧功能,但发现一些困难。这是我的代码:

在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;
    }
}

在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);
    }
}

在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 ....");
    }

}

在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>

在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>

在driverpath.properties上:

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

在driver.properties上:

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

当我从startup.xml执行此操作时,我在TestNG报告中收到错误:

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

1 个答案:

答案 0 :(得分:1)

您无法从驱动程序类转换为DriverInitialization

你必须使用你的setter方法:

 driverInit = new DriverInitialization();
 driverInit.setWebDriver(context.getBean(browser));