需要验证表内的文本(Python,Selenium)

时间:2019-06-26 16:07:26

标签: python selenium ui-automation

我是自动化的新手,有几个月的时间在学习,有空的时候就去学习。

我试图确认用户名是否出现在表内,并且该用户名将出现在多行中。

我正在使用类似这样的东西:

@step('Users homepage my lists created by is only user "{username}"')

def step_impl(context, username):

    users_name = context.browser.find_elements_by_xpath(
        "//*[@id='apollo-table_wrapper']][contains(text(),'%s')]" % username)

我知道该表的xpath正确,但是如果我想验证屏幕上仅可见特定的用户名,我就会遇到问题。

在下面的这张图中,我想进行一个测试,以确保页面上仅存在“ mike”的用户。我会在功能文件中喊出“麦克” ...

General idea of the UI

2 个答案:

答案 0 :(得分:1)

您将]更改为//

users_name = context.browser.find_elements_by_xpath(
        "//*[@id='apollo-table_wrapper']//[contains(text(),'%s')]" % username)

要遍历您可以执行以下操作:

users_names = context.browser.find_elements_by_xpath("//*[@id='apollo-table_wrapper']")
print([i.text for i in users_names if i.text == "Mike"])
# Or you can append to list:
res = []
[res.append(i.text) for i in users_names if i.text == "Mike"]
print(res)

答案 1 :(得分:0)

如果我理解您的意思,您将不会验证网格中的所有名称,并检测其中的任何一个名称是否不是“ Mike”。您可以使用下面的代码从网格中选择所有名称,然后验证它们是否与预期的不同

#This will only work if the Xpath bellow selects only the names, if it 
#selects other fields from the table it will verify if all the fields are 
#"Mike", instead of only the Name fields.
users_name = context.browser.find_elements_by_xpath("//*[@id='apollo-table_wrapper']")
result = true
expectedValue = "Mike"

for x in users_name:
    if x.text != expectedValue
        result = false
        break
#Assert result here

让我知道这是否行不通。