检索WebElement的列表并识别它们



是否有方法识别WebElement名称并将其分配给WebElement列表?例如,使用以下约定:W

@FindBy(xpath="")
WebElement listFirstObject;
@FindBy(xpath="")
WebElement listSecondObject;

如果这是一个基本问题,请原谅我,但对于任何测试人员来说,这似乎都是一个非常常见的场景,因为许多应用程序都有具有通用名称的对象列表。在我的例子中,我有一个包含700多个对象的控制列表,如果能够编写一些迭代方法来捕获并单独创建列表中的每个公共WebElement,那就太好了。

**我已经对我的问题进行了更新,以便进一步澄清**获取整个信息网格对我来说是全新的,所以请具体说明答案,因为我正在努力理解其背后的逻辑。

所以我要寻找的元素是网格数据,我已经成功地捕获了整个网格,例如

@FindBy(id="ctl00_SomeGridData_ucControlList_trgControlList_ctl00")
List<WebElement> someGridData;

如果我单独捕捉网格中的每个新添加,它看起来是这样的:

@FindBy(id="ctl00_SomeGridData_ucControlList_trgControlList_ctl00__0")
WebElement someGridObj1;
@FindBy(id="ctl00_SomeGridData_ucControlList_trgControlList_ctl00__1")
WebElement someGridObj2;
@FindBy(id="ctl00_SomeGridData_ucControlList_trgControlList_ctl00__2")
WebElement someGridObj3;

正如你所看到的,每个单独的网格元素都以"__#"结尾。显然,这是一个无限的列表,我无法单独捕获每个WebElement并分配一个WebElement值用于测试。我想问的是,我如何捕获整个列表,然后如果我稍后需要调用单个WebElement来测试我如何做到这一点?我希望这能澄清并感谢您的阅读。

好的,现在已经编辑了您的问题,您想知道的内容很清楚了。假设网格数据位于td元素中,则可以执行以下操作。

@FindBy(css = "td[id^=ctl00_SomeGridData_ucControlList_trgControlList_ctl00__]")
List<WebElement> allGridData;

通过使用^(意思是以开头),可以收集id以ctl00_SomeGridData_ucControlList_trgControlList_ctl00__开头的所有td元素。

是的,你可以这样做:

List<WebElement> mylist = driver.findElements(By.xpath("ur xpath"));
System.out.println("Size of the list is : " +mylist.size()); 

这将告诉你mylist中有多少网络元素。

现在应用循环在控制台上打印mylist的值在for循环中,你也可以给它们分配一个类似的值

for(int i = 0;i<mylist.size();i++){
   System.out.println("index of webelements in increasing order is : " + i + mylist.get(i).getText());  
    // this will assign an index of 0 to max for the weblements in the 
    list like index 0 = for 1 webelement ,index 1 = for 2nd webelement ,
    index 2 = for 3rd webelement and so on 
}

最新更新