69 lines
1.7 KiB
Python
69 lines
1.7 KiB
Python
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)
|