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

在Java Selenium WebDriver中使用迭代器

俞博涛
2023-03-14
public static boolean FeatureFunctionsCheck(String Feature){
try
{

    Iterator<WebElement> all = (Iterator<WebElement>) Driver.Instance.findElement(By.xpath("//a[contains(text()," + Feature + ")]/ancestor::h3/following-sibling::div/div[@class='navMenu']/p"));

    boolean check = false;
    while(all.hasNext() && check){

        WebElement temp = all.next();
        if(!temp.getText().equals(""))
        {

            Log.Info("Functions: " + temp.getText());
            all = (Iterator<WebElement>) Driver.Instance.findElement(By.xpath("//a[contains(text()," + Feature + ")]/ancestor::h3/following-sibling::div/div[@class='navMenu']/p"));

        }
        else 
            check = true;
    }

    return false;
}
catch(Exception e)
{
    Log.Error("Failed()" + e);
    return false;
}
}
java.lang.ClassCastException: org.openqa.selenium.remote.RemoteWebElement cannot be cast to java.util.Iterator
public static boolean FeatureFunctionsCheck(String Feature){
try
{
    List<WebElement> AllModelFunctions = new ArrayList<WebElement>();


    Log.Info("[Test-235]: Selecting Feature");
    for(WebElement element: AllModelFunctions){
        if(!element.getText().equals(""))
        {   
            Log.Info("Functions: " + element.getText());
        }
    }
    return false;
}
catch(Exception e)
{
    Log.Error("Failed()" + e);
    return false;
}
}

共有1个答案

胡意致
2023-03-14

findelement返回一个webelement。您可能要做的是使用findelements搜索给定xpath中的所有元素:

Driver.Instance.findElements(...

而且语法过于复杂。您只需获取列表并遍历它:

List<WebElement> elements = Driver.Instance.findElements(...);
for(WebElement element : elements) {
    if(!element.getText().equals(""))
    {   
        Log.Info("Functions: " + element.getText());
    }
}

顺便说一下,我必须完全相信driver.instance是驱动程序的一个实例(通常在Java中,类实例没有大写,所以我不确定我是否理解正确)。更常见的语法如下:

WebDriver driver = new FirefoxDriver(); // or another browser
driver.findElements(...);
// ...
 类似资料:
  • 问题内容: 我正在尝试使用迭代器遍历我的日志列表中的列表。目标是搜索包含与新日志相同的电话号码,类型和日期的日志 但是,我在条件语句中得到了java.util.NoSuchElementException。有谁知道可能导致问题的原因? 我的密码 问题答案: 您在一次迭代中调用了很多次,迫使移至一个不存在的元素。 代替 用 每次调用时,它都会向前移动基础光标。

  • 在“掌握C++17 STL”一书中,我看到iterator和const_iterator在一个类中实现,使用条件来减少代码重复 下面是我对简单数组类的实现(跳过数组类的大部分代码): 这段代码编译时没有错误,但iterator有点不可用: 给出错误: 我该如何使用那个迭代器呢?还是我应该从书上放弃这个想法呢?

  • null 一些示例输出数据: *编辑:工作的scala代码行:

  • 问题内容: 您能想到一种很好的方法(也许使用itertools)将迭代器拆分为给定大小的块吗? 因此,with成为迭代器 我可以想到一个小程序来做到这一点,但是使用itertools并不是一个好方法。 问题答案: 在 从配方文件的食谱来靠近你想要什么: 但是,它将使用填充值填充最后一个块。 较不通用的解决方案仅适用于序列,但可以根据需要处理最后一个块 最后,一种可在一般迭代器上运行且其行为符合预期

  • 问题内容: 编辑:感谢您的所有迅速答复。现在,我看到该作业将无效。从另一个线程,我读到Java中的迭代器比C ++中的迭代器功能强大得多。请问为什么在Java中使用迭代器?只是要替换“ for”循环?谢谢。 一些注意事项: 第二个迭代器应从第一个迭代器之后的位置开始。 我尝试从头开始遍历一个有序列表,然后在列表中找到一些对象,这些对象具有与aItr所指向的属性相似的属性。 我不介意使用两个“ fo

  • 问题内容: 我有这样的地图 现在,我必须迭代此Map,然后迭代该地图内的ArrayList。如何使用JSTL做到这一点? 问题答案: 你可以使用标签来遍历数组,集合和映射。 如果是数组和集合,则每次迭代var都会立即为你提供当前迭代的项目。 对于地图,每次迭代var都会为你提供一个Map.Entry对象,该对象又具有getKey()和getValue()方法。 在你的特定情况下,实际上是a Lis