setup_timeout_logs.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #!/usr/bin/env python3
  2. """Show a timed-out action on the logs page."""
  3. import time
  4. from selenium.webdriver.common.by import By
  5. from selenium.webdriver.support.ui import WebDriverWait
  6. def _wait_for_body_attr(driver, attr, timeout=15):
  7. WebDriverWait(driver, timeout).until(
  8. lambda d: bool(d.find_element(By.TAG_NAME, "body").get_attribute(attr))
  9. )
  10. def _wait_for_timed_out_log(driver, timeout=20):
  11. def has_timed_out_row(d):
  12. try:
  13. status = d.find_element(By.CSS_SELECTOR, ".logs-table .status-timeout").text
  14. except Exception:
  15. return False
  16. return "Timed out" in status
  17. WebDriverWait(driver, timeout).until(has_timed_out_row)
  18. def run(driver):
  19. _wait_for_body_attr(driver, "loaded-dashboard")
  20. driver.find_element(By.CSS_SELECTOR, '[title="Slow action"]').click()
  21. # Default timeout is 3 seconds; the action sleeps for 5.
  22. time.sleep(5)
  23. driver.execute_script("window.location.href = '/logs'")
  24. WebDriverWait(driver, 15).until(
  25. lambda d: d.find_elements(By.CSS_SELECTOR, ".logs-table tbody tr")
  26. )
  27. _wait_for_timed_out_log(driver)
  28. time.sleep(0.2)