在Selenium方法中使用%s

时间:2018-05-14 03:43:09

标签: python selenium

现在我有下面的方法,它工作得很好但是我想改变self.wait_for_element(....)的一部分而不是使用%s而不是调用str(counter)

> def gather_recent_visited_courses_in_content_switcher(self):      
    hover_courses = self.browser.find_elements_by_xpath("//div[contains(@class, 'recent-content flyout-closed')]")
    course_list = []
    counter = 1
    for course in hover_courses:
        self.hover_over(course)
        # Change the below to %s
        self.wait_for_element("//div[contains(@class, 'fly-wrapper recent-content-trigger')][" + str(counter) + "]//div[contains(@class, 'recent-content-info')]", 'Course list not found')
        course_display_name = course.find_element_by_xpath("//div[contains(@class, 'recent-content-info')]").text
        course_list.append(str(course_display_name))
        counter += 1
    return course_list

目前,我在用[%s]替换时遇到错误,如下所示

> self.wait_for_element("//div[contains(@class, 'fly-wrapper recent-content-trigger')][%s]//div[contains(@class, 'recent-content-info')]", 'Course list not found' %(counter))

有没有人对如何使其正常工作有任何想法?到目前为止,我一直得到'并非所有参数都在字符串格式化过程中转换'错误

1 个答案:

答案 0 :(得分:4)

使用%s工作的原因是因为您在第二个字符串参数中设置了占位符值,而不是您想要的第一个字符串。

第一个论点:

"//div[contains(@class, ...)][%s]//div[... 'recent-content-info')]"

Python无法在第一个字符串参数中找到用%s替换的正确值。所以,这会引起错误。

至于第二个论点:

'Course list not found' % (counter)

您正在将值传递给字符串,但无法将字符串格式化为使用传递的值,因为字符串没有占位符%s。所以,这也会引发错误。

要解决此问题,只需格式化第一个字符串参数即可。它看起来像这样:

"//div[contains(@class, '...')][%s]//div[..., 'recent-content-info')]" % counter

或者,您可以使用.format()。这是新格式的字符串格式。使用%s被认为是旧式 [1]

"//div[contains(@class, '...')][{}]//div[..., 'recent-co...')]".format(counter)

注意:字符串已经过编辑,以便于阅读。

参考