Selenium Webdriver - 测试数据表上的数据更改

时间:2018-02-24 07:36:15

标签: selenium selenium-webdriver

我有一些带过滤器和排序的数据表。每当我使用某些条件过滤数据表时,表上的行都会发生变化。

假设我在数据表中有一个用户列表,我根据用户是管理员用户还是普通用户来过滤用户,因此如果我选择带有过滤器下拉列表的管理员用户,则只会显示管理员用户。

除了数据本身发生变化之外,这些过滤数据中的许多变化都不会以任何方式反映数据表。基于数据本身的测试不可靠,因为它变化太快。

测试过滤/排序工作正常的最佳方法是什么?

我的一个想法是使用所需数据向表列添加数据属性,并使用Web驱动程序检查它们是否满足条件。

<table>
  <tr>
    <th>User Id</th>
    <th>Username</th>
    <th>Email</th>
  </tr>
  <tr>
    <td data-qa-user-type="admin">1</td> <!-- Note the data attribute -->
    <td>Maria</td>
    <td>maria@email.com</td>
  </tr>
</table>

1 个答案:

答案 0 :(得分:1)

如果您要检查过滤器是否正常工作,可以像使用此代码段一样使用WebElements:

element = driver.find_elements_by_xpath("//td[@data-qa-user-type='normal']")
if len(element) == 0 :
    print("pass")
else :
    print("fail")

如果找到特定类型的用户(普通用户),则断言失败。

如果页面未刷新,我们可以刷新页面或在分析dom中的更改后根据某个特定元素的外观或消失等待。现在,为了检查数据是否按排序顺序,我们可以执行以下操作:

# now checking for sorted elements or not
element = driver.find_elements_by_xpath("//td[@data-qa-user-type='admin']//following-sibling::td")
originalList = []
for i in range(0,len(element),2) :
    originalList.append(element[i].text)
sortedList = sorted(originalList)
if originalList == sortedList :
    print("pass again")
else :
    print("Fail")

希望它有所帮助。