我想添加一些数据,然后检查它是否存在于页面上。问题是,使用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进行测试。
答案 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非常有用答案 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);
}
}
}