![](/img/trans.png)
[英]java.lang.ClassCastException: org.openqa.selenium.By$ById cannot be cast to org.openqa.selenium.WebElement
[英]java.lang.ClassCastException: java.base/java.lang.String cannot be cast to org.openqa.selenium.WebElement when executing test through Selenium
我正在嘗試在Selenium WebDriver中進行自動化測試,但是Eclipse向我顯示了以下錯誤:
java.lang.ClassCastException: java.base/java.lang.String cannot be cast to org.openqa.selenium.WebElement
這是我的代碼:
public void SeachApp()
{
Object elem = driver.getPageSource().contains("Staffing");
if (elem != null)
{
System.out.println("Encontrado");
int width = ((WebElement) elem).getSize().getWidth();
Actions act = new Actions(driver);
act.moveToElement((WebElement) elem)
.moveByOffset((width / 2) - 15, 0)
.click()
.perform();
}
else
{
System.out.println("Não Encontrado");
}
}
這是怎么回事,我該如何解決?
根據文檔, getPageSource()
返回當前頁面的源,並定義為:
獲取上次加載頁面的來源。 如果在加載后修改了頁面(例如,通過Javascript),則不能保證返回的文本是修改后的頁面的文本。 您需要遵循用於確定返回的文本是反映頁面的當前狀態還是Web服務器最后發送的文本的特定驅動程序的文檔。 返回的頁面源是底層DOM的表示形式:不要期望它以與從Web服務器發送的響應相同的方式進行格式化或轉義。
contains()
方法是一種Java方法,用於檢查String是否包含另一個子字符串 。 它返回布爾值,因此可以直接在if語句內部使用。
您使用的表達式:
driver.getPageSource().contains("Staffing");
將返回布爾值,但將其轉換為Object
類型。 此外,當您嘗試將Object
類型轉換為WebElement
類型時,您會看到以下錯誤:
java.lang.ClassCastException: java.base/java.lang.String cannot be cast to org.openqa.selenium.WebElement
如果要定位WebElement ,則必須使用以下兩種方法之一:
現在,如果您希望獲得文本為Staffing的WebElement (無需任何對相關HTML的引用),則可以使用以下解決方案:
WebElement element = driver.findElement(By.xpath("//*[contains(text(),'Staffing')]"));
現在,一旦你所在的WebElement,你可以很容易地與WebElement執行你的任務剩余。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.