例外:' str'对象没有属性' text'

时间:2017-08-08 14:56:58

标签: python selenium webdriver

我试图遍历页面上的元素,然后从元素中获取文本。在收到文本的同时,我试图删除一个特定的单词" NEW"然后将其添加到列表中。

这是我的代码。

def test(self, cardname):

    mylist = []
    allrows = self.driver.find_elements_by_xpath("//*[contains(@id, 'scopes-pending-')]")
    count = len(allrows)

    for i in range(count):
        rows = self.driver.find_element_by_id("scopes-" + cardname + "" + str(i) + "").text
        if "NEW" in rows:
            row_split = rows.strip('NEW')
            mylist.append(row_split.text)
        else:
            mylist.append(rows.text)

    return mylist

但我收到此错误

Exception: 'str' object has no attribute 'text'

我尝试了许多不同的方法,但没有一种方法可行。例如,

rows = self.driver.find_element_by_id("scopes-" + cardname + "" + i + "").text

这给了我以下错误:

Exception: must be str, not int

似乎我错过了一些非常小的东西,需要帮助解决它(仍然是python的新手)。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

您想从一开始就想要做的一件事就是使用描述性变量名称。这将帮助您和其他必须阅读您的代码的人了解您的目标。

我用我最好的猜测改变了一些变量名称。如果我猜错了,显然可以随意将它们改成任何有意义的东西。

mylist - > labelList

allrows - > rowLabels

rows - > rowLabel(单数,因为它只有一个)

删除了一些“额外”变量。如果我不打算再次使用它,我倾向于不创建新的变量。例如,count只保留len(allrows)。您可以移除count,只需在len(allrows)循环中显示的唯一位置使用for

删除了定位器中的一些额外"",例如...cardname + "" + str(i) + ""+ "" +在这里没有做任何事情,因为你只是连接一个空字符串""所以我删除了它们。

如果子字符串存在,

rows.strip()将删除字符串。如果子字符串不存在,则只返回整个字符串。既然如此,您就不需要if-else

下面的代码是我写这个的方式。

def test(self, cardname):
    labelList = []
    allrows = self.driver.find_elements_by_xpath("//*[contains(@id, 'scopes-pending-')]")

    for i in range(len(allrows)):
        rowLabel = self.driver.find_element_by_id("scopes-" + cardname + str(i)).text
        labelList.append(rowLabel.strip('NEW'))

    return labelList

警告......我不是一个python程序员,因此可能会有一些优化和方法使这段代码比我建议的更加python-y。

关于错误,

  

例外:'str'对象没有属性'text'

row_split = rows.strip('NEW')
mylist.append(row_split.text)

在上面的行中,row_split是一个字符串,您正在执行导致错误的<string>.text.text可以在Web元素上使用。

  

异常:必须是str,而不是int

rows = self.driver.find_element_by_id("scopes-" + cardname + "" + i + "").text

你已经修好了这个。它抱怨iint而不是字符串。 str(i)解决了这个问题。

答案 1 :(得分:0)

您是否尝试过添加row_split?如果它是str对象,则 可能您要查找的文本(Python中的str是字符串对象。)

如果您添加了错误信息,那么该信息也很有用。

我的猜测是,您的第一个例外是尝试从字符串text获取row_split属性(我假设从text返回的self.driver.find_element_by_id属性属于str)类型。

然后,您尝试连接str和int(即i)时遇到第二个异常。您将i投射到str

是正确的