207 lines
5.3 KiB
Python
207 lines
5.3 KiB
Python
from selenium.webdriver.common.by import By
|
|
from selenium.webdriver.support.ui import WebDriverWait
|
|
from selenium.webdriver.support import expected_conditions as EC
|
|
import re
|
|
|
|
|
|
class DashboardPage:
|
|
URL = "https://hypermedialearning.project2025.id/public/dashboard"
|
|
|
|
# ===== POPUP (MODAL) =====
|
|
POPUP_MODAL = (By.ID, "kuesionerModal")
|
|
|
|
BTN_ISI_KUESIONER_POPUP = (
|
|
By.XPATH, "//div[@id='kuesionerModal']//a[contains(text(),'Isi Kuesioner')]"
|
|
)
|
|
|
|
BTN_TUTUP_POPUP = (
|
|
By.XPATH, "//div[@id='kuesionerModal']//button[contains(text(),'Tutup')]"
|
|
)
|
|
|
|
BTN_CLOSE_X = (
|
|
By.XPATH, "//div[@id='kuesionerModal']//button[@aria-label='Close']"
|
|
)
|
|
|
|
MODAL_KUESIONER = (By.ID, "kuesionerModal")
|
|
|
|
BTN_TUTUP_MODAL = (
|
|
By.XPATH,
|
|
"//button[contains(text(),'Nanti') or contains(text(),'Tutup')]"
|
|
)
|
|
|
|
KM_VALUE = (
|
|
By.XPATH,
|
|
"//span[normalize-space()='Knowledge of Metakognitif (KM)']"
|
|
"/ancestor::div[contains(@class,'card')]"
|
|
"//span[normalize-space()='Nilai']/following-sibling::span"
|
|
)
|
|
|
|
RM_VALUE = (
|
|
By.XPATH,
|
|
"//span[normalize-space()='Regulation of Metakognitif (RM)']"
|
|
"/ancestor::div[contains(@class,'card')]"
|
|
"//span[normalize-space()='Nilai']/following-sibling::span"
|
|
)
|
|
|
|
LEARNING_STYLE_VALUE = (
|
|
By.XPATH,
|
|
"//span[normalize-space()='Learning Style']"
|
|
"/ancestor::div[contains(@class,'card')]"
|
|
"//span[normalize-space()='Gaya Belajar']/following-sibling::span"
|
|
)
|
|
|
|
PENGISIAN_KUESIONER_SECTION = (
|
|
By.XPATH,
|
|
"//h6[normalize-space()='Pengisian Kuesioner']/ancestor::div[contains(@class,'card')]"
|
|
)
|
|
|
|
KUESIONER_VARK_MAI_TEXT = (
|
|
By.XPATH,
|
|
"//td[normalize-space()='Kuesioner VARK dan MAI']"
|
|
)
|
|
|
|
ISI_KUESIONER_BUTTON = (
|
|
By.XPATH,
|
|
"//a[@href='https://hypermedialearning.sanggadewa.my.id/kuesioner-panduan']"
|
|
)
|
|
|
|
|
|
|
|
def __init__(self, driver):
|
|
self.driver = driver
|
|
self.wait = WebDriverWait(driver, 15)
|
|
|
|
def open(self):
|
|
self.driver.get(self.URL)
|
|
|
|
# POM for test dashboard PopUp
|
|
|
|
def is_popup_visible(self):
|
|
try:
|
|
self.wait.until(
|
|
EC.visibility_of_element_located(self.POPUP_MODAL)
|
|
)
|
|
return True
|
|
except:
|
|
return False
|
|
|
|
def click_isi_kuesioner_pop_up(self):
|
|
self.wait.until(
|
|
EC.element_to_be_clickable(self.BTN_ISI_KUESIONER_POPUP)
|
|
).click()
|
|
|
|
def close_popup_with_x(self):
|
|
btn = self.wait.until(
|
|
EC.visibility_of_element_located(self.BTN_CLOSE_X)
|
|
)
|
|
btn.click()
|
|
self.wait_popup_disappear()
|
|
|
|
def is_redirected_to_kuesioner(self):
|
|
self.wait.until(lambda d: "kuesioner" in d.current_url)
|
|
return True
|
|
|
|
def wait_popup_disappear(self):
|
|
self.wait.until(
|
|
EC.invisibility_of_element_located(self.POPUP_MODAL)
|
|
)
|
|
|
|
#POM for Test Dashboard KMRM
|
|
|
|
def close_kuesioner_popup_if_present(self):
|
|
btn = self.wait.until(
|
|
EC.visibility_of_element_located(self.BTN_CLOSE_X)
|
|
)
|
|
btn.click()
|
|
self.wait_popup_disappear()
|
|
|
|
def get_km_status_text(self):
|
|
return self.wait.until(
|
|
EC.visibility_of_element_located(self.KM_VALUE)
|
|
).text.strip()
|
|
|
|
def get_rm_status_text(self):
|
|
return self.wait.until(
|
|
EC.visibility_of_element_located(self.RM_VALUE)
|
|
).text.strip()
|
|
|
|
def is_km_not_filled(self):
|
|
return self.get_km_status_text() == "()"
|
|
|
|
def is_rm_not_filled(self):
|
|
return self.get_rm_status_text() == "()"
|
|
|
|
def is_km_filled(self):
|
|
el = self.wait.until(
|
|
EC.visibility_of_element_located(self.KM_VALUE)
|
|
)
|
|
return el.text.strip()
|
|
|
|
def is_rm_filled(self):
|
|
el = self.wait.until(
|
|
EC.visibility_of_element_located(self.RM_VALUE)
|
|
)
|
|
return el.text.strip()
|
|
|
|
#POM for Learning Style
|
|
|
|
def get_learning_style_text(self) -> str:
|
|
el = self.wait.until(
|
|
EC.visibility_of_element_located(self.LEARNING_STYLE_VALUE)
|
|
)
|
|
return el.text.strip()
|
|
|
|
def is_learning_style_not_filled(self) -> bool:
|
|
return self.get_learning_style_text() == "(Tidak diketahui)"
|
|
|
|
def is_learning_style_filled(self) -> bool:
|
|
text = self.get_learning_style_text()
|
|
return text != "" and text != "(Tidak diketahui)"
|
|
|
|
#POM for Pengisian Kuesioner
|
|
def is_pengisian_kuesioner_section_visible(self) -> bool:
|
|
try:
|
|
self.wait.until(
|
|
EC.visibility_of_element_located(
|
|
self.PENGISIAN_KUESIONER_SECTION
|
|
)
|
|
)
|
|
return True
|
|
except:
|
|
return False
|
|
|
|
def is_kuesioner_vark_mai_visible(self) -> bool:
|
|
try:
|
|
self.wait.until(
|
|
EC.visibility_of_element_located(
|
|
self.KUESIONER_VARK_MAI_TEXT
|
|
)
|
|
)
|
|
return True
|
|
except:
|
|
return False
|
|
|
|
def click_isi_kuesioner(self):
|
|
self.wait.until(
|
|
EC.element_to_be_clickable(
|
|
self.ISI_KUESIONER_BUTTON
|
|
)
|
|
).click()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|