2017-07-03 44 views
0

我试图自动化一个Web应用程序进行多个浏览器测试。我正在尝试整合一些春季特色,但发现一些难题。这里是我的代码:获取错误 - java.lang.ClassCastException:org.openqa.selenium.chrome.ChromeDriver无法转换为com.initialization.DriverInitialization

在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

您不能从驾驶员级别投射到DriverInitialization

你必须使用你的setter方法:

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

我想:driverInit =新DriverInitialization(); driverInit.setWebDriver(context.getBean(browser)); :它的工作。 –

相关问题