【问题标题】:Webdriver Timeout ExceptionWebdriver 超时异常
【发布时间】:2016-10-09 14:46:00
【问题描述】:

我试图了解代码中的问题在哪里:

class WebTest(unittest.TestCase):

@classmethod
def setUpClass(cls):
    binary = FirefoxBinary('/home/andrew/Downloads/firefox 45/firefox')
    cls.browser = webdriver.Firefox(firefox_binary=binary)
    cls.wait = WebDriverWait(cls.browser, 10)
    cls.browser.maximize_window()
    cls.browser.get('http://www.test.com/')

def test_login_menu_elements(self):
    self.wait.until(EC.element_to_be_clickable((By.XPATH, "//a[@id='menu_min']"))).click() 
    check_icons(self)
    self.wait.until(EC.element_to_be_clickable((By.XPATH, "//a[@id='menu_min']"))).click() 
    check_fields(self)

def test_add_news(self):
    self.wait.until(EC.element_to_be_clickable((By.XPATH, "//span[contains(.,'News')]"))).click()
    self.wait.until(EC.element_to_be_clickable((By.XPATH, "//a[@href='/manager/news']"))).click()    

@classmethod
def tearDownClass(cls):
    cls.browser.quit()

if __name__=='__main__':
   unittest.main()

每次收到TimeoutException,我真的不明白为什么,代码哪里出了问题

【问题讨论】:

  • 您能否发布堆栈跟踪和可用于重现异常的 HTML 的最小示例?
  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定问题或错误在问题本身中重现它所需的最短代码。没有明确的问题陈述的问题对其他读者没有用处。请参阅:minimal reproducible example

标签: python unit-testing selenium selenium-webdriver


【解决方案1】:

可以接收TimeoutException,而您的代码不会出现任何逻辑或语法错误。

TimeoutExceptions 将在未找到 wait.until 预期条件时引发。

我发现一些有用的东西:

  • 使用 chrome/firefox 开发工具隔离 xpath 并右键单击元素,并显示 xpath
  • 使用上述步骤中的 xpath,确保选择的条件正确
  • ime 具有前端经验,使用 css 选择器通常比相对 xpath 更直观、更易于理解。
  • 通过打开开发工具控制台并使用$x({{ XPATH_HERE }}) 检查您正在使用的选择器以确保它有效
  • 对于动态 HTML,使用 python 调试器并确保 html 在每个预期条件之间处于预期状态

【讨论】:

  • 但问题是如果我不在我的代码中使用,请等待。直到我能找到该元素。例如,如果我在我的代码中使用 time.sleep(1),我可以找到该元素,并且我没有 TimeoutException。我认为我的 WebDriverWait 有问题,我无法理解是什么问题。
  • 我想我发现问题出在哪里。问题是,我测试的页面使用 AJAX。在这个链接 training-course-material.com/training/… 我看到显式等待不适用于 AJAX。
猜你喜欢
  • 2016-09-16
  • 2013-02-22
  • 2018-07-14
  • 2021-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-09
  • 2022-01-18
相关资源
最近更新 更多