即使Web对象不可见,也会找到Xpath

时间:2013-08-01 23:18:15

标签: java xpath selenium null visible

我使用selenium 2.0自动化代码。我从列表中选择一个(或几个)用户。然后,我单击一个添加按钮,使用户名在网格上可见。在网格上可见时,每个用户都将拥有一个有效的Xpath。但是,即使从网格中删除了所有用户名,如果没有显示用户名,实际上也会消失,Xpath仍然不会返回null。我正在使用Xpath来检查当对象(用户名)不可见时它是否返回null,但它不能按预期工作。有没有其他方法可以解决我的问题?我对Selenium很新。我正在使用selenium 2.0。贝娄是我的代码的一部分。非常感谢您的帮助。

//Check if user is present on the grid
By checkuser = By.xpath( ".//*[@id='sharing_list']/tbody/tr/td[1]/span");

 //if the grid is not empty, which means the grid is visible...
if(null!=checkuser)   //where the problem is!!
{
    //Click the button to erase the names in the grid, then the grid desapears
    webDriver.findElement(By.xpath("//*[@id='sharing_list']/tbody/tr/td[4]/span")).click();
       Thread.sleep(2000);

    //more code
    //............

}

1 个答案:

答案 0 :(得分:1)

我可以看到这里发生了两件事:

首先,您的XPath足够通用,它正在选择一些非用户的其他元素。要查看是否属于这种情况,请在Chrome中转到该页面并执行必要的操作以使其处于所需状态。接下来,按Ctrl-Shift-J,单击控制台,然后键入$x("//*[@id='sharing_list']/tbody/tr/td[4]/span")。然后,Chrome会显示您的选择器正在选择哪个元素。

然后,您的任务是识别是否选择了其他元素,或者该元素是否不可见。绝对可以在页面上有一个元素,但是不可见,WebDriver会选择不可见的元素(除非你正在做By.linkText())。如果您想检查元素是否可见,请执行element.isDisplayed()