mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-03-08 01:24:09 +01:00
nixos/clickhouse: tests: ui: fix race conditions in Selenium assertions
Use explicit WebDriverWait conditions instead of immediate assertions for elements whose content is populated asynchronously by JavaScript. The server_info text and query result elements may not be ready immediately after page load or button click, causing flaky failures Also handle shadow DOM found in newer ClickHouse versions
This commit is contained in:
parent
90d418b652
commit
62a5851dee
1 changed files with 36 additions and 15 deletions
|
|
@ -29,6 +29,7 @@
|
|||
from selenium import webdriver
|
||||
from selenium.webdriver.common.by import By
|
||||
from selenium.webdriver.firefox.options import Options
|
||||
from selenium.webdriver.support import expected_conditions as EC
|
||||
from selenium.webdriver.support.ui import WebDriverWait
|
||||
|
||||
options = Options()
|
||||
|
|
@ -41,33 +42,53 @@
|
|||
|
||||
wait = WebDriverWait(driver, 60)
|
||||
|
||||
assert len(driver.find_elements(
|
||||
By.ID, "query_div")) == 1
|
||||
wait.until(EC.presence_of_element_located(
|
||||
(By.ID, "query_div")))
|
||||
|
||||
version = "${lib.strings.replaceStrings [ "-stable" "-lts" ] [ "" "" ] package.version}"
|
||||
wait.until(EC.text_to_be_present_in_element(
|
||||
(By.XPATH, "//span[@id='server_info']"), version))
|
||||
|
||||
# Determine if a shadow DOM is used for query-result and
|
||||
# query-progress
|
||||
result_els = driver.find_elements(By.ID, "query-result")
|
||||
uses_shadow = len(result_els) > 0
|
||||
if uses_shadow:
|
||||
result_shadow = result_els[0].shadow_root
|
||||
progress_shadow = driver.find_element(
|
||||
By.ID, "query-progress").shadow_root
|
||||
|
||||
|
||||
def find_rows():
|
||||
root = result_shadow if uses_shadow else driver
|
||||
return root.find_elements(
|
||||
By.CSS_SELECTOR, ".row-number")
|
||||
|
||||
|
||||
def find_check_mark():
|
||||
root = progress_shadow if uses_shadow else driver
|
||||
return root.find_elements(
|
||||
By.CSS_SELECTOR, "#check-mark")
|
||||
|
||||
server_info_element = driver.find_element(
|
||||
By.XPATH, "//span[@id='server_info']")
|
||||
assert "${
|
||||
lib.strings.replaceStrings [ "-stable" "-lts" ] [ "" "" ] package.version
|
||||
}" in server_info_element.text
|
||||
|
||||
# Shouldn't show before query done
|
||||
assert len(driver.find_elements(
|
||||
By.CSS_SELECTOR, ".row-number")) == 0
|
||||
assert len(find_rows()) == 0
|
||||
|
||||
query_box = driver.find_element(
|
||||
By.XPATH, "//textarea[@id='query']")
|
||||
query_box.click()
|
||||
query_box.send_keys("SELECT 1")
|
||||
|
||||
query_run_button = driver.find_element(
|
||||
driver.find_element(
|
||||
By.XPATH, "//button[@id='run']").click()
|
||||
|
||||
# Now verify results shown
|
||||
assert len(driver.find_elements(
|
||||
By.XPATH, "//div[@id='check-mark']")) == 1
|
||||
# Wait for query to complete
|
||||
WebDriverWait(driver, 60).until(
|
||||
lambda d: len(find_check_mark()) > 0)
|
||||
|
||||
assert len(driver.find_elements(
|
||||
By.CSS_SELECTOR, ".row-number")) == 2
|
||||
# Wait for results to render
|
||||
WebDriverWait(driver, 60).until(
|
||||
lambda d: len(find_rows()) > 0)
|
||||
|
||||
driver.close()
|
||||
'';
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue