如何使用 Data Table 验证同一页面中的所有元素

How to verify all the elements in the same page using Data Table

我想知道如何找到同一页面中的所有元素并断言它们显示在页面中使用数据 table in Selenium / Java /Cucumber.

比如我有这样一个场景

Sceanario: Verify all the elements in the xyz page
Given I am in the abc page
When I navigate to xyz page
Then I can see the following fields in the xyz page
|field 1|
|field 2|
|field 3|
|field 4|

如果将所有值放入数组会怎么样 { field 1, field 2, field 3, field 4 } 下一步 -> 将检查页面上每个值的可见性?

我认为它应该可以解决您的问题。

第一步: 构建数据 Table。 (线索,使用 Header 我们可以以更干净和精确的方式实现数据 Table 并考虑数据 Table 如下所示)

Then I can see the following fields in the xyz page
    | Field Name | Locator |
    |  field 1   |  Xpath1 |
    |  field 2   |  Xpath2 |
    |  field 3   |  Xpath3 | 
    |  field 4   |  Xpath4 | 

第二步:实施步骤定义

    @Then    
    public void I_can_see_the_following_fields_in_the_xyz_page(DataTable table) throws Throwable {
        WebElement element;
        List<Map<String, String>> list = table.asMaps(String.class,String.class); 
        for(Map<String, String> list : data) {
            element = driver.findElement(By.xpath(list.get("Locator")));
            Assert.assertTrue("Element : "+list.get("Field Name")+ "not found",isElementPresent(element));   
        }
    }

实用方法:检查元素是否存在

    protected synchronized boolean isElementPresent(WebElement element) {
        boolean elementPresenceCheck = false;
        Wait<WebDriver> wait=null;
        try {
            wait = new FluentWait<WebDriver>((WebDriver) driver).withTimeout(10, TimeUnit.SECONDS).pollingEvery(1,
                    TimeUnit.SECONDS);
            elementPresenceCheck = wait.until(ExpectedConditions.visibilityOf(element)).isDisplayed();
            return elementPresenceCheck;
        }catch(Exception e) {
            return elementPresenceCheck;
        }
    }