我使用的是Python 2.7.8和Selenium 2.45.0。我将在这个问题中使用Amazon.com作为我的例子。我的测试看起来像这样:
class Test1(unittest.TestCase):
def testStep1(self):
self.browser = webdriver.Firefox()
self.browser.get("http://www.amazon.com")
if self.browser.find_element_by_link_text('Amazon'):
assert(True)
else:
assert(False)
def testStep2(self):
self.browser.find_element_by_css_selector('#nav-link-shopall').click()
directory_span = self.browser.find_elements_by_xpath('//*[@id="siteDirectoryHeading"]')
for span in directory_span:
if "EARTH'S BIGGEST SELECTION" in span.text:
assert(True)
else:
assert(False)
发生的事情是,单击该按钮时,它不会转到所需的页面。正因为如此,地球的最大选择"" EARTH&B'BIGGEST SELECTION"永远不会显示,但断言说它已经过去了。它为什么这样做?
注意:我更改了代码,现在正按预期工作。我把上面改为:
def testStep2(self):
(webdriver.ActionChains(self.browser)).double_click(self.browser.find_element_by_id('nav-link-shopall')).perform()
directory = self.browser.find_element_by_id('siteDirectoryHeading').text
if "EARTH'S BIGGEST SELECTION" in directory:
assert(True)
else:
assert(False)
代码现在找到directory_span文本并按预期传递。感谢您的投入和帮助!我只是没有意识到我需要double_click()
来代替click()
。
答案 0 :(得分:0)
您的问题是,如果self.browser.find_elements_by_xpath('//*[@id="siteDirectoryHeading"]')
找不到任何元素,则不会出现错误,而是空列表。
这是实际发生的事情 - directory_span
是一个空列表,并且永远不会执行正文循环。这就是你看到测试通过的原因。