如果所有元素具有相同的id,则在表中定位元素

时间:2017-05-05 14:25:13

标签: java angularjs selenium selenium-webdriver

我想添加一些数据,然后检查它是否存在于页面上。问题是,使用firebug检查它时的UI看起来非常难看。这是使用角度完成的。我和开发人员交谈过,他为一些元素添加了一些合理的ID。然而,其中一些,特别是表格元素有旧的命名。添加数据后,我想断言该元素存在于表中。这是我的要素:

<div id="entity_data_manager_table_cell_code" class="d3-data-table-cell code" _    ngcontent-mrb-1="" ng-reflect-class-name="d3-data-table-cell code" ng-
reflect-id="entity_data_manager_table_cell_code"> Test_Code </div>

问题是表中的所有元素都有id =“entity_data_manager_table_cell_code”。有没有办法解决这个问题,还是解决方案重命名页面上的所有元素?

我正在使用Selenium和Java进行测试。

5 个答案:

答案 0 :(得分:0)

Id是独一无二的。由于ID不可复制,因此您需要替换/重命名这些重复项。

在所有情况下,都禁止重复ID。

希望能帮到你!

答案 1 :(得分:0)

如果您的桌子在标签内;你可以尝试下面的代码;它逐个检查表中的每个元素,这样你就不必担心具有相同id的元素:

List<WebElement> storeRows = storesTable.findElements(By.cssSelctor("table tr"));

for(WebElement row : storeRows ){

 WebElement column = storeRows.findElement(By.agNamE("td"));

 for(int i=0; i<column.size();i++{

 if(column.get(i).getText().equals("value of your element"){

   //then do your action here

     }

   }
}

答案 2 :(得分:0)

另一种解决方案是尝试使用除ID之外的其他标识符来定位元素 例如Xpath因为它为你提供了很多有用的函数来定位你的元素ex(父元素,子元素,等等)

如果您将使用Xpath方法

,则URL非常有用

http://www.guru99.com/xpath-selenium.html

答案 3 :(得分:0)

如果文本中的不同,并且您知道可以使用XPATH定位器的预期文本。

String xpath = "//*[text() = 'YOUR_TEXT']"
WebElement e = driver.findElement(By.Xpath(xpath));

答案 4 :(得分:0)

这是我用于测试的代码。到目前为止它已经过去了,但如果有人有任何意见,请告诉我:

public void testAddNewEntity() {
    String generatedEntityCode = RandomStringUtils.randomAlphanumeric(20).toUpperCase();
    String generatedEntityName = RandomStringUtils.randomAlphanumeric(10).toUpperCase();

    EntitiesPage entitiesPage = new EntitiesPage(browser);

    entitiesPage.newEntity.click();
    entitiesPage.codeInputField.sendKeys(generatedEntityCode);
    entitiesPage.nameInputField.sendKeys(generatedEntityName);
    entitiesPage.parentCodeInputField.sendKeys("Next");
    entitiesPage.streetAddressInputField.sendKeys("Princess Street");
    entitiesPage.numberAddressInputField.sendKeys("31");
    entitiesPage.cityAddressInputField.sendKeys("London");
    entitiesPage.countryAddressInputField.sendKeys("UK");
    entitiesPage.zipInputField.sendKeys("312");

    entitiesPage.submitEntityButton.click();

    List<WebElement> codes = entitiesPage.entityTable.findElements(By.id("entity_data_manager_table_cell_code"));
    List<WebElement> names = entitiesPage.entityTable.findElements(By.id("entity_data_manager_table_cell_name"));

    Iterator<WebElement> rows = codes.iterator();
    Iterator<WebElement> nameRows = names.iterator();
    while (rows.hasNext()) {
        WebElement row = rows.next();
        if (row.getText() == generatedEntityCode) {
            Assert.assertEquals(nameRows.next().getText(), generatedEntityName);
        }

    }
}
相关问题