现在我有下面的方法,它工作得很好但是我想改变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))
有没有人对如何使其正常工作有任何想法?到目前为止,我一直得到'并非所有参数都在字符串格式化过程中转换'错误
答案 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)
注意:字符串已经过编辑,以便于阅读。