如何跳过selenium webdriver中不存在的定位器?

时间:2016-02-19 10:15:28

标签: selenium-webdriver

我在页面中有大约50行。但这些项目是按顺序进行的。

问题是有人输入并删除了该表行。那个id不会出现在页面中..

示例:

popup:org.eclipse.ui.popup.any?after=additions

如果用户删除了第二条记录,那么页面上会有两条记录,但ID为101,103。

我试着写一下,如果那个id存在,那么得到文本,然后在for循环中留下。我只获取记录,直到找到该ID未找到显示User added 1st record: id 101 added. User added 2nd record: id 102 added User added 3rd record: id 103 added.

请更正代码。但我想解决的问题是,如果该ID不存在,请跳过并运行else部分。

NoSuchElementException

我得到的例外:

  

线程中的异常" main" org.openqa.selenium.NoSuchElementException:无法找到带有xpath == // * [@ id =' 7593'] / a的元素(警告:服务器未提供任何堆栈跟踪信息)   命令持续时间或超时:503毫秒

3 个答案:

答案 0 :(得分:0)

尝试使用此方法isPresent而不是isDisplayed。

public boolean isPresent(WebElement e) {
    boolean flag = true;
    try {
        e.isDisplayed();
        flag = true;
    }
    catch (Exception e) {
        flag = false;
    }
    return flag;
}

答案 1 :(得分:0)

How about this:

        for (int i = counterstart; i <= counterend; i++) {

            WebElement element;

            try{
                element = driver.findElement(By.xpath("//*[@id='" + i + "']/a"));
            }catch(NoSuchElementException n)
            {
                element = null;
            }

            if(element !=null){
                System.out.println(i+" is present");
                String Projects = driver.findElement(By.xpath("//*[@id='" + i + "']/a")).getText();
                System.out.println(Projects);
            }else{
                System.out.println(i+" is NOT present");
            }
        }

答案 2 :(得分:0)

查找要从中获取文本的所有元素的所有父元素,并使用它向下钻取,这样就不会出现异常

假设html看起来像这样

Edit

你可以这样做

<div id="parent">
  <div id="11">
    <a>text</a>
  </div>
  <div id="12">
    <a>text</a>
  </div>
  <div id="13">
    <a>text</a>
  </div>
</div>