当前位置: 首页 > 知识库问答 >
问题:

类型安全:未检查从WebElement强制转换到List

田镜
2023-03-14

我的代码:-文件1。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");
            }
        }

错误:-

JAVAlang.ClassCastException:类组织。openqa。硒。遥远的RemoteWebElement不能转换为java类。util。列表(org.openqa.selenium.remote.RemoteWebElement位于加载器“app”的未命名模块中;java.util.List位于加载器“bootstrap”的java.base模块中)

问题是,当我在F上运行或键入时ile1.java在List ls=(List)ele处收到警告;警告是类型安全:未检查从WebElement到List的强制转换

有人能帮忙吗,怎么解决这个...

共有2个答案

辛可人
2023-03-14

这非常复杂。

强制转换运算符((某物类型)某物扩展))做3件几乎完全不相关的事情。我认为你在这里混淆了其中的一些。

如果SomeType是一个原始数字类型(intchardoublefloatlongbyteshort),则强制转换为另一个。

但这就是强制转换的转换方面的结束。在所有其他情况下,您只是告诉编译器:我知道表达式的类型是我告诉您的类型。有时,会添加运行时检查(如果表达式不是那种类型,这将抛出ClassCastException)。有时,编译器只是相信你的话。

泛型部分(

但这一警告在这种情况下是完全不相关的:问题根本不是这一部分。获取运行时检查的非泛型部分(列表)。因为它得到了一个运行时检查,编译器不会发出警告:这很好——如果您的类型断言被证明是错误的,那么在运行时您将得到一个异常,它将通知您这一点。

因此,警告是关于<代码>

您的WebElement不是列表。也许您正在尝试创建一个包含单个元素的列表。在这种情况下,您需要List.of(ele);。正如我所说,类型断言模式强制转换不会转换任何内容,因此您不能使用它将元素转换为仅包含该元素的列表。

章威
2023-03-14
WebElement ele = getObject(locator);
List<WebElement> ls = (List<WebElement>) ele;

您正在将列表转换为WebElement,这是无效的。我相信你的getObject方法,你正在使用findElement方法来识别定位器。而不是使用findElements方法来获取web元素的列表

试试像下面这样,

List<WebElement> ls = driver.findElements(By.xpath(locator));
 类似资料:
  • 问题内容: 在我的spring应用程序上下文文件中,我有类似以下内容: 在java类中,实现如下所示: 在Eclipse中,我看到一条警告: 类型安全性:未经检查的从Object到HashMap的转换 我做错了什么?我该如何解决该问题? 问题答案: 好吧,首先,你正在通过新的HashMap创建调用浪费内存。你的第二行完全忽略了对此创建的哈希图的引用,从而使该哈希图可用于垃圾收集器。因此,不要这样做

  • 我有这样一种方法,将结果强制转换到(列表),但我的eclipse仍然在抱怨!类型安全:未选中从列表到列表的强制转换

  • 问题内容: 我尝试将一个对象强制转换为我的Action类,但是会导致警告: 感谢您的任何帮助 问题答案: 是的- 这是类型擦除的自然结果。如果确实是if 的实例,则强制转换不会捕获该实例-您只会在尝试使用它时才看到问题,传入a 而不是字符串。 您可以使用以下方法消除警告: 作为功​​能注释,但您不能轻松地解决潜在的问题:(

  • 下面是程序的一部分,它将ArrayList从服务器发送到客户端。我想删除关于此代码最后一行的警告: 客户端代码: MyVariable是一个具有一些属性的Java类。服务器正在创建一个ArrayList并用MyVariable变量作为项目填充它。然后它将完整的列表发送给客户端。 我想知道为什么我在那里有一个警告,以及如何完美地编码以获得0个警告。如果可能,我希望避免使用“@SuppressWarn

  • 我有一个通用类。它看起来像这样: 显然,conevertdatajsonstring方法仅在字符串类型为T时调用。但有一个警告: 类型安全:未选中从字符串转换为T 有没有一种方法可以在不使用SuppressWarnings的情况下解决此问题: @抑制警告(“未选中”) 方法之前?

  • //一些代码... 方法的定义: 执行存储过程并返回输出参数的映射,按名称键入,如参数声明中所示 上面一行的警告: 来抑制它。 问题:但我如何正确地施放它呢? > 我尝试的一种方法是 不过,我还是必须在castObject()方法中放入SuppressWarnings(“unchecked”)。我不知道这样做是否正确。 我尝试的第二种方法是, 欢迎提出任何建议/建议。