1

我正在将一堆人添加到列表中,稍后我想将它们从列表中删除。我编写了一个方法,可以单击标准 X 元素来删除用户。我的问题是,当我到达没有更多 X 元素实例可以点击的地步时,我收到如下错误:

"[31morg.openqa.selenium.NoSuchElementException: 无法定位元素:{"method":"xpath","selector":"//div[3]/ul/li/div/div/img"}"

但这不是我退出 While 循环的方式吗?当 element = null 并且因此条件为 false 时,while 循环不应该结束并且不踢出错误消息吗?

public class PrivacyList extends FluentPage {

@FindBy(xpath="//div[3]/ul/li/div/div/img") 
private FluentWebElement XIcon ;


public void removeUserFromlist(){

    while(XIcon!= null){            
            System.out.println("XICON is displayed");
            XIcon.click();
            System.out.println("XICON was clicked");
        }
    System.out.println("Users Removed");
}

}

谢谢

4

2 回答 2

2

PageFactory, using @FindBy,懒惰地评估 WebElement - 这意味着它是第一次使用。第一次后,不再评价!因此,在您的情况下,如果第一次找到它,它将永远不会变为null,除非您每次通过循环重新评估它。

您将不得不使用其他东西来退出循环。也许是//div[3]/ul/li元素的数量。

于 2015-03-30T17:11:15.410 回答
1

评估 Xpath 地址而不是 webElement 解决了这个问题,并且是摆脱 while 循环的简单方法。

while(driver.findElements(By.xpath("//div[3]/ul/li/div/div/img")).size()!=0)
于 2015-04-01T09:25:03.693 回答