0
有人可以請解釋如何解決這段代碼?每當我運行LoginTest
我得到java.lang.ClassCastException: features.pages.HomePage cannot be cast to features.pages.LoginPage
。無論是類子類的BasePage和鑄造沒有泛型工作正常泛型java.lang.ClassCastException
public class Base {
public static BasePage currentPage;
public <T extends BasePage> T GetInstance(Class<T> page) {
Object obj = PageFactory.initElements(DriverContext.Driver, page);
return page.cast(obj);
}}
BasePage.java
public abstract class BasePage extends Base {
public <T extends BasePage> T As(Class<T> pageInstance) {
try {
return (T) this;
} catch (Exception e) {
e.getStackTrace();
}
return null;
}}
LoginPage.java
public class LoginPage extends BasePage {
public HomePage login(String username, String password) {
txtUserName.sendKeys(username);
txtPassword.sendKeys(password);
btnLogin.submit();
return GetInstance(HomePage.class);
}}
LoginTest.java
public class LoginTest extends Base{
@Test
public void Login() {
currentPage = GetInstance(HomePage.class);
currentPage.As(HomePage.class).clickLogin();
// breaks at login()
currentPage.As(LoginPage.class).login("admin", "password");
你是什麼意思鑄造沒有泛型工作正常?您正在嘗試將兩個不同的對象投射到彼此。由於'login'方法返回一個'HomePage'實例,爲什麼不把該方法的返回值賦給'currentPage'變量呢? – EsotericVoid
除非'HomePage'是'LoginPage'的超類,否則不能將'HomePage'投射到'LoginPage'。注意:這與泛型本身無關,這只是直接引用類型轉換。 –
我想如果你有'CurrentPage = GetInstance(BasePage.class)',可能會有一些希望,但是因爲你已經安排在開始時將它作爲HomePage的一個實例,所以我不希望演員工作。 –