Java Selenium中如何基于Xpath容器迭代Web元素?

cu6pst1q  于 2023-01-20  发布在  Java
关注(0)|答案(1)|浏览(102)

我需要创建函数,该函数需要验证Web UI上的所有列标题,即姓名年龄性别身高
我准备好了列标题的xpath:

List<Webelement> allLinks= driver.findElements(By.xpath("//button[@class='sort-header-btn']"));

单个工作XPath为:

//button[@class='sort-header-btn' and contains(text(),'Name')]

我不能像这样单独存储每个xpath,我决定迭代每个xpath:

Iterator<WebElement> itr = allLinks.iterator();
while(itr.hasNext()) {
if(itr.next().getText().contains("Name")){
    System.out.println("Name column is validated");
break;
}
else{
System.out.println("Name column is not validated");
break;
}
if(itr.next().getText().contains("Gender")){
    System.out.println("Gender column is validated");
break;
}
else{
System.out.println("Gender column is not validated");
break;
}
//same way I follow remaining columns
}

这是正确的做法吗?

3ks5zfa0

3ks5zfa01#

从我的Angular 来看,您所描述的迭代WebElement列表并检查每个元素的文本以验证列标题的方法通常是正确的,人们可能会有不同的看法。
但是,您可以对代码进行一些改进:
使用for循环而不是迭代器。这将使代码更易读,更容易理解。

for (WebElement element : allLinks) {
    if (element.getText().contains("Name")) {
        System.out.println("Name column is validated");
    } else {
        System.out.println("Name column is not validated");
    }
    if (element.getText().contains("Gender")) {
        System.out.println("Gender column is validated");
    } else {
        System.out.println("Gender column is not validated");
    }
    // same way for remaining columns
}

您可以使用switch case语句,而不是对每列使用一系列if-else语句,以使代码更具可读性和可维护性。

for (WebElement element : allLinks) {
    String columnTitle = element.getText();
    switch (columnTitle) {
        case "Name":
            System.out.println("Name column is validated");
            break;
        case "Age":
            System.out.println("Age column is validated");
            break;
        case "Gender":
            System.out.println("Gender column is validated");
            break;
        case "Height":
            System.out.println("Height column is validated");
            break;
        default:
            System.out.println(columnTitle + " is not a valid column title");
            break;
    }
}

使用boolean变量来检查是否有列标题未被验证也是一种很好的做法,如果有列标题未被验证,那么测试可能失败。
此外,您还可以使用assertTrue()方法Assert列标题出现在WebElements列表中,这将使代码更加健壮,并允许您以更优雅的方式处理任何异常。

for (String title : new String[]{"Name", "Age", "Gender", "Height"}) {
    boolean isValidated = false;
    for (WebElement element : allLinks) {
        if (element.getText().contains(title)) {
            System.out.println(title + " column is validated");
            isValidated = true;
            break;
        }
    }
    assertTrue(isValidated);
}

相关问题