Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 72 additions & 0 deletions fastfive-auto-app-dev/pages/entrance_card_issue_page.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
from selenium.webdriver.common.by import By
from .base_page import BasePage


class EntranceCardIssuePage(BasePage):
ANDROID = {
'entrance_tab': (By.XPATH, '//*[@content-desc="출입카드" or @text="출입카드"]'),
'issue_button': (By.XPATH, '//*[@text="출입카드 발급" or @text="출입카드 생성"]'),
}

IOS = {
'entrance_tab': (By.XPATH, '//XCUIElementTypeButton[contains(@label, "출입카드")]'),
'issue_button': (By.XPATH, '//XCUIElementTypeOther[@name="출입카드 발급" or @name="출입카드 생성"]'),
}

def get_selector(self, key):
return self.ANDROID[key] if self.is_android() else self.IOS[key]

def go_to_entrance_card_tab(self):
self.click(self.get_selector('entrance_tab'))
print("출입카드 탭 클릭")
self.wait_seconds(2)

def click_issue_button(self):
if self.is_ios():
element = self.find_element(self.get_selector('issue_button'))
element.click()
else:
self.click(self.get_selector('issue_button'))
print("출입카드 생성 버튼 클릭")
self.wait_seconds(2)

def select_last_item(self):
"""바텀시트 리스트의 마지막 항목 선택 (좌표 기반)"""
window = self.driver.get_window_size()
tap_x = window['width'] // 2
if self.is_ios():
# 화면 높이의 84% 지점 = 마지막 라디오 항목
tap_y = int(window['height'] * 0.84)
print(f"마지막 항목 탭 (x={tap_x}, y={tap_y})")
self.driver.execute_script('mobile: tap', {'x': tap_x, 'y': tap_y})
else:
items = self.driver.find_elements(By.XPATH, '//android.widget.TextView')
exclude = {'모바일 출입카드 발급', '발급', '출입카드 생성', '출입카드 발급', ''}
targets = [el for el in items if el.text not in exclude]
assert targets, "선택 가능한 항목이 없습니다"
last = targets[-1]
print(f"마지막 항목 선택: {last.text}")
last.click()
self.wait_seconds(1)

def click_confirm_button(self):
"""발급 버튼 클릭 (좌표 기반)"""
window = self.driver.get_window_size()
tap_x = window['width'] // 2
if self.is_ios():
# 화면 높이의 94% 지점 = 발급 버튼
tap_y = int(window['height'] * 0.94)
print(f"발급 버튼 탭 (x={tap_x}, y={tap_y})")
self.driver.execute_script('mobile: tap', {'x': tap_x, 'y': tap_y})
else:
self.click((By.XPATH, '//*[@text="발급"]'))
print("발급 버튼 클릭")
self.wait_seconds(2)

def full_entrance_card_issue_flow(self):
self.go_to_entrance_card_tab()
self.click_issue_button()
self.select_last_item()
self.click_confirm_button()
print("✅ 출입카드 생성 테스트 완료")
return True