【问题标题】:Selenium webdriver store webelement in webelement listSelenium webdriver 将 webelement 存储在 webelement 列表中
【发布时间】:2014-12-16 11:41:13
【问题描述】:

如何将webelement存储在webelement列表中?我已经为 webelement 创建了列表并在 add 方法中传递了 webelement obj,但系统显示 null 异常。 Java 代码:List<WebElement> element=null;,在 for 循环中,我在 add 方法中传递 webelement obj,例如:WebElement we = driver...("test"); element.add(0,we);

为什么我收到空指针异常 (java.lang.NullPointerException)?

非常感谢您的意见。

 public void test(){
 List<WebElement> element = null;

    int rows=1;
    for(int i=1; i<=rows;i++){
        text=driver.findElement(By.xpath("//*[@id='testid']/table/tbody/tr["+i+"]/td/p")).getText();
        if(!text.equals("")){
            for(int j=1;j<=rows;j++){
                if(isElementPresent(driver, By.xpath("//*[@id='testid']/table/tbody/tr["+(j+1)+"]/td[6]/a"))){
                    WebElement we =driver.findElement(By.xpath("//*[@id='testid']/table/tbody/tr["+(j+1)+"]/td[6]/a"));
                    element.add(we);
                    rows++;
                }
            }
        }else{
            break;
        }
    }
    for(WebElement we:element){
        we.click();
        }
    }

谢谢,

【问题讨论】:

  • 可以添加代码sn-p吗?
  • 我已经添加了代码sn-p
  • 下面@Nahuel 的方法是正确的。请尝试一下,如果有其他问题,请告诉我们.. :)
  • @Subh,只是想知道我们何时编写类似 List element = driver.findElements(By.id("test")) 的代码。系统没有给出任何空指针异常。为什么?
  • 它不会给你空指针异常,因为如果没有找到任何元素, findElements 会返回一个空列表。只有在 findElement 的情况下才会抛出异常。

标签: java selenium-webdriver


【解决方案1】:

您将元素设置为 null,然后尝试向其添加一些内容。你不能添加任何东西,因为它是空的!

试试这个:

List<WebElement> element=new ArrayList<WebElement>();
...

如您所见,我在使用对象之前对其进行了初始化,因此它不应再为空。

【讨论】:

  • 然后您在 RHS 使用 Interface 对其进行了初始化。使用像 new ArrayList&lt;&gt;(); 这样的具体类
  • 哎呀,我不熟悉java,我以为它和C#一样。更新了答案:P
  • @Nahuel 感谢您的意见。
【解决方案2】:

请替换您的以下行:

 WebElement we = driver.findElement(By.xpath("//*[@id='testid']/table/tbody/tr["+(j+1)+"]/td[6]/a"));

如下:

 java.util.List<WebElement> element= driver.findElement(By.xpath("//*[@id='testid']/table/tbody/tr["+(j+1)+"]/td[6]/a"));

您还可以使用以下方法获取列表大小:System.out.println(we.size()); 如果有任何疑问,请告诉我。

【讨论】:

  • 嘿,我不能使用它,因为我想将新找到的元素存储在元素列表中,因为您给出的第二行将始终创建新列表。
  • 您应该将该行置于循环之外。它将列表存储在元素中,然后您可以根据需要在循环中调用它。
【解决方案3】:

列出专辑 = driver.findElements(By.cssSelector("._3rte"))

为我工作。

选择器当然由您决定。第一部分是重点

【讨论】:

    猜你喜欢
    • 2012-08-19
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 2018-11-20
    • 2011-03-18
    • 1970-01-01
    相关资源
    最近更新 更多