import os from time import sleep from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import ElementClickInterceptedException from .config_reader import get_step_delay_seconds STEP_DELAY_SECONDS = get_step_delay_seconds() class StepActions: def __init__(self, driver, wait, test_context): self.driver = driver self.wait = wait self.folder = test_context["folder"] self.test_context = test_context self.step = 1 self.test_context.setdefault("steps", []) def capture(self, name): filename = f"{self.step:02d}_{name}.png" path = os.path.join(self.folder, filename) self.driver.save_screenshot(path) self.test_context["steps"].append( { "index": self.step, "name": name, "path": path, "status": "passed", } ) print(f"STEP {self.step}: {name}") self.step += 1 sleep(STEP_DELAY_SECONDS) def click(self, locator, name): element = self.wait.until( EC.element_to_be_clickable(locator) ) self.driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", element) try: element.click() except ElementClickInterceptedException: self.driver.execute_script("arguments[0].click();", element) self.capture(name) def type(self, locator, value, name): element = self.wait.until( EC.visibility_of_element_located(locator) ) element.clear() element.send_keys(value) self.capture(name)