[英]Type safety: Unchecked cast from WebElement to List<WebElement>
我的代碼:- File1.java
public int isListAvailable(String locator) throws Exception {
WebElement ele = getObject(locator);
List<WebElement> ls = **(List<WebElement>) ele;**
//List<WebElement> ls1 = driver.findElements((By) ele);
//List<WebElement> ls2 = driver.findElements(ele);
int rowCount = ls.size();
System.out.println("Last1 row=" + rowCount);
return rowCount;
}
public WebElement getObject(String locatorKey) throws Exception {
WebElement ele = null;
WebDriverWait wait = new WebDriverWait(driver, 10);
try {
if (locatorKey.endsWith("_xpath")) {
ele = driver.findElement(By.xpath(prop.getProperty(locatorKey))); wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(prop.getProperty(locatorKey))));
}
.....
...
....
}catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return ele;
}
File2.java(catlisting_xpath是XPATH的元素)
public void search_List() throws Exception {
if(con.isListAvailable("catlisting_xpath") >=1)
{
con.infoLog("Category List is available");
}else {
con.infoLog("Category List is not available");
}
}
錯誤:-
java.lang.ClassCastException: class org.openqa.selenium.remote.RemoteWebElement cannot be cast to class java.util.List (org.openqa.selenium.remote.RemoteWebElement is in unnamed module of loader 'app'; java.util.列表在加載程序“bootstrap”的模塊 java.base 中)
問題是,當我在 File1.java 上面運行或鍵入它時,在 List ls = (List) ele; 處收到警告; 警告是類型安全:未檢查從 WebElement 到 List 的強制轉換
任何人都可以幫忙,如何解決這個......
這出奇地復雜。
強制轉換運算符 ( (SomeType) someExpr)
) 做了 3 件幾乎完全不相關的事情。 我認為你在這里混淆了其中的一些。
如果SomeType
是原始數字類型( int
、 char
、 double
、 float
、 long
、 byte
或short
),則強制轉換將一個事物轉換為另一個事物。
但這就是演員轉換方面結束的地方。 在所有其他情況下,您只是在告訴編譯器:我知道表達式是我告訴您的類型。 有時,會添加運行時檢查(如果表達式結果不是該類型,則會拋出ClassCastException
)。 有時,編譯器會相信您的話。
generics 部分 ( <WebElement>
) - 該部分是編譯器只接受您的話,並生成該警告的地方。
但在這種情況下,該警告完全無關緊要:問題根本不在於那部分。 非泛型部分( List
),進行運行時檢查。 因為它進行了運行時檢查,所以編譯器不會發出警告:沒關系 - 如果您的類型斷言被證明是錯誤的,在運行時您會得到一個異常,通知您這件事。
所以,警告是關於<WebElement>
部分的,但是你在運行時得到的錯誤是關於List
部分的。
您的 WebElement不是列表。 也許您正在嘗試創建一個包含單個元素的列表。 在那種情況下,你會想要List.of(ele);
. 正如我所說,類型斷言模式轉換不轉換任何內容,因此您不能使用它將元素轉換為僅包含該元素的列表。
WebElement ele = getObject(locator);
List<WebElement> ls = (List<WebElement>) ele;
您正在將List
轉換為WebElement
,這是無效的。 我相信您使用findElement
方法來識別定位器的getObject
方法。 而不是使用findElements
方法獲取WebElement
List
像下面這樣嘗試,
List<WebElement> ls = driver.findElements(By.xpath(locator));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.