簡體   English   中英

java.lang.ClassCastException:通過Selenium執行測試時,無法將java.base / java.lang.String強制轉換為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()

根據文檔, 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 ,則必須使用以下兩種方法之一:

現在,如果您希望獲得文本為StaffingWebElement (無需任何對相關HTML的引用),則可以使用以下解決方案:

WebElement element = driver.findElement(By.xpath("//*[contains(text(),'Staffing')]"));

現在,一旦你所在的WebElement,你可以很容易地與WebElement執行你的任務剩余。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM