Я работаю над веб-приложением, которое требует, чтобы пользователь загружал определенные документы на одной странице перед отправкой заявки на проверку. После того, как пользователь нажал кнопку «Загрузить» и выбрал файл, начался процесс загрузки, и после его завершения рядом с кнопкой загрузки появился значок галочки. Я пытаюсь добиться того, чтобы я загружал необходимые документы и устанавливал значок галочки после завершения процесса загрузки.
Я поместил все локаторы кнопок загрузки и значков галочек в Locators.py
, как показано ниже.
from selenium.webdriver.common.by import By
class Locators():
## -- Document upload button --
DOCUMENT_1_BUTTON = (By.CSS_SELECTOR, 'div.body__individual > div:nth-child(1) > div.box__action > button')
DOCUMENT_2_BUTTON = (By.CSS_SELECTOR, 'div.body__individual > div:nth-child(2) > div.box__action > button')
DOCUMENT_3_BUTTON = (By.CSS_SELECTOR, 'div.body__individual > div:nth-child(3) > div.box__action > button')
## -- Check mark icon --
DOCUMENT_1_CHECKMARK = (By.CSS_SELECTOR, 'div.body__individual > div:nth-child(1) > div.box__info > svg > g')
DOCUMENT_2_CHECKMARK = (By.CSS_SELECTOR, 'div.body__individual > div:nth-child(2) > div.box__info > svg > g')
DOCUMENT_3_CHECKMARK = (By.CSS_SELECTOR, 'div.body__individual > div:nth-child(3) > div.box__info > svg > g')
Требуемый путь к файлу для загрузки, я поместил его в TestData.py
, как показано ниже.
class TestData():
# --- File Path ---
DOC_1_PATH = "C:\\docs\\doc-1.pdf"
DOC_2_PATH = "C:\\docs\\doc-2.pdf"
DOC_3_PATH = "C:\\docs\\doc-3.pdf"
Чтобы повторить процесс загрузки, на странице и методе Pages.py
, я написал this.
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains as AC
import autoit
from Locators import Locators
from TestData import TestData
class BasePage():
def __init__(self, driver):
self.driver = driver
# click the element whose locator is passed to it
def click(self, by_locator):
WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(by_locator)).click()
# upload document or file on web element whose locator and the file path is passed to it.
def upload(self, by_locator, by_path_file):
element = WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable(by_locator))
AC(self.driver).move_to_element(element).click().perform()
handle = "[CLASS:#32770; TITLE:Open]"
autoit.win_wait(handle, 15)
autoit.control_set_text(handle, "Edit1", by_path_file)
autoit.control_click(handle, "Button1")
# returns true or false depending upon visibility of element whose locator is passed to it
def is_visible(self, by_locator):
try:
element = WebDriverWait(self.driver, 200).until(EC.visibility_of_element_located(by_locator))
return bool(element)
except TimeoutException:
return False
class CreateApplicationPage(BasePage): # Page where the documents are required to upload
def __instancecheck__(self, driver):
super().__init__(driver)
# --- Functions to upload document for each required document ---
def upload_document_1(self):
self.upload(Locators.DOCUMENT_1_BUTTON, TestData.DOCUMENT_1_PATH)
def upload_document_2(self):
self.upload(Locators.DOCUMENT_2_BUTTON, TestData.DOCUMENT_2_PATH)
def upload_document_3(self):
self.upload(Locators.DOCUMENT_3_BUTTON, TestData.DOCUMENT_3_PATH)
Последнее, для тестового файла Tests.py
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import unittest
from Locators import Locators
from TestData import TestData
from Pages import CreateApplicationPage
#Base class for the tests
class IMDGBaseTest(unittest.TestCase):
def setUp(self):
# Some setup here
def tearDown(self):
# close the browser window
self.driver.quit()
class MainTest(BaseTest):
def test_001_create_application(self):
#Instantiating an object of CreateApplicationPage class and start to upload documents
self.createApplicationPage = CreateEditApplicationPage(self.homePage.driver)
# Upload reqired documents and assert a checkmark when the upload process is finished
## Document 1
self.createApplicationPage.upload_document_1()
self.assertTrue(self.createApplicationPage.is_visible(Locators.DOCUMENT_1_CHECKMARK))
## Document 2
self.createApplicationPage.upload_document_2()
self.assertTrue(self.createApplicationPage.is_visible(Locators.DOCUMENT_2_CHECKMARK))
## Document 3
self.createApplicationPage.upload_document_3()
self.assertTrue(self.createApplicationPage.is_visible(Locators.DOCUMENT_3_CHECKMARK))
Есть ли более эффективный способ повторения процесса загрузки?