从表到数组的多个UI元素

时间:2018-06-05 03:57:13

标签: java selenium selenium-webdriver automation automated-tests

我正在用Java编写Selenium测试,我的脚本首先运行针对源系统的查询并收集预期结果。对于此示例,我的查询返回4个成员编号,然后我想要与UI上的表交叉引用,以确保这4个成员编号出现在表中。我还需要确保在UI上显示的不超过或少于这4个成员编号。当源系统数据发生变化时,查询可能会返回3或5个成员编号,因此我需要我的测试足够聪明,以便根据查询结果知道要查找的成员编号数。

我认为我根据UI断言查询结果的方法是将两个数据集都放到一个数组中并运行一个断言等于确保它们相互匹配。

我的用户界面如下:

this

您可以看到4个成员编号始终显示在班级" ng-binding sorting_1"中。我想知道如何编写定位器来抓取每个定位器并将它们放入数组中。

如果不是这种检查的方式,也可以听取不同的方法。

3 个答案:

答案 0 :(得分:2)

调用driver.findElements()以获取第一个表列中的所有tds。

String locator = "tbody > tr[data-ng-repeat='member in searchresult'] > td.sorting_1";

List<WebElement> tds = driver.findElements(By.cssSelector(locator));

ArrayList<String> memberNums = new ArrayList<String>()

for(WebElement ele : tds) {
  memberNums.add(ele.getText());
}

答案 1 :(得分:1)

这是迭代表格每一行的代码。我希望你现在可以与之相关

    List<WebElement> rows = driver.findElements(By.Id("DataTables_Table_0"));


    // Now using Iterator we will iterate all elements
    Iterator<WebElement> iter = rows.iterator();

    // this will check whether list has some element or not
    while (iter.hasNext()) {

        // Iterate one by one
        WebElement item = iter.next();

        // get text
        String label = item.getText();

答案 2 :(得分:1)

它将加载td中的所有值。

    List<WebElement> tableElements =  driver.findElements(By.xpath("//tbody//*");

    ArrayList<String> tdDetails = new ArrayList<String>();

    for (WebElement tableElement: tableElements ) {
             tdDetails.add(tableElement.getText());

     }

如果你想获得td class =&#34; ng-binding sorting_1

内的所有值

需要遵循以下步骤。

String attributeValue = "ng-binding sorting_1";
List<WebElement> tableElements =  driver.findElements(By.xpath("//tbody//*");

        ArrayList<String> tdDetails = new ArrayList<String>();

        for (WebElement tableElement: tableElements ) {

                if(tableElement.getAttribute("class")!=null && tableElement.getAttribute("class")==attributeValue){

                      tdDetails.add(tableElement.getText());
                }


         }