pages/desktop/developers/devhub_addon_validate.py (102 lines of code) (raw):

import os from pages.desktop.base import Base from selenium.webdriver.common.by import By from pathlib import Path from selenium.webdriver.support import expected_conditions as EC class DevhubAddonValidate(Base): """AMO Developer Hub Validate Add-on Page""" URL_TEMPLATE = "developers/addon/validate" # Locators _create_addon_form = (By.ID, "create-addon") _addon_on_your_site = ( By.CSS_SELECTOR, "#id_channel > div:nth-child(1) > label:nth-child(1)", ) _addon_on_your_own = ( By.CSS_SELECTOR, "#id_channel > div:nth-child(2) > label:nth-child(1)", ) _upload_addon_button = (By.ID, "upload-addon") _firefox_app = (By.CSS_SELECTOR,) _create_addon_paragraph = (By.CSS_SELECTOR, ".create-addon p") _list_addon_label = (By.CSS_SELECTOR, ".list-addon label") _on_this_site_checkbox = (By.CSS_SELECTOR, "#id_channel_0") _on_your_own_text_checkbox = (By.CSS_SELECTOR, "#id_channel_1") _upload_details_text = (By.CSS_SELECTOR, ".upload-details") _upload_status_results_succes = (By.ID, "upload-status-results") _upload_status_results_failed = ( By.CSS_SELECTOR, "div.upload-status div.status-fail strong", ) _upload_status_bar_results_approved = (By.CSS_SELECTOR, "div.bar-success") _upload_status_bar_results_failed = (By.CSS_SELECTOR, "div.bar-fail") _upload_status = (By.ID, "uploadstatus") _upload_errors = (By.ID, "upload_errors") def wait_for_page_to_load(self): self.wait.until( lambda _: self.find_element(*self._create_addon_form).is_displayed() ) return self def is_validation_approved(self): """Wait for addon validation to complete; if not successful, the test will fail""" self.wait.until( EC.visibility_of_element_located(self._upload_status_bar_results_approved) ) def is_not_validated(self): """Wait for addon validation to complete; if successful, the test will fail""" self.wait.until( EC.visibility_of_element_located(self._upload_status_bar_results_failed) ) @property def addon_on_your_site(self): self.wait_for_element_to_be_displayed(self._addon_on_your_site) return self.find_element(*self._addon_on_your_site) @property def addon_on_your_own(self): self.wait_for_element_to_be_displayed(self._addon_on_your_own) return self.find_element(*self._addon_on_your_own) @property def create_addon_paragraph(self): self.wait_for_element_to_be_displayed(self._create_addon_paragraph) return self.find_element(*self._create_addon_paragraph) @property def list_addon_label(self): self.wait_for_element_to_be_displayed(self._list_addon_label) return self.find_element(*self._list_addon_label) @property def on_this_site_checkbox(self): self.wait_for_element_to_be_displayed(self._on_this_site_checkbox) return self.find_element(*self._on_this_site_checkbox) @property def on_your_own_text_checkbox(self): self.wait_for_element_to_be_displayed(self._on_your_own_text_checkbox) return self.find_element(*self._on_your_own_text_checkbox) @property def upload_details_text(self): self.wait_for_element_to_be_displayed(self._upload_details_text) return self.find_element(*self._upload_details_text) @property def upload_details_results_succes(self): self.wait_for_element_to_be_displayed(self._upload_status_results_succes) return self.find_element(*self._upload_status_results_succes) @property def upload_details_results_failed(self): self.wait_for_element_to_be_displayed(self._upload_status_results_failed) return self.find_element(*self._upload_status_results_failed) @property def upload_status(self): self.wait_for_element_to_be_displayed(self._upload_status) return self.find_element(*self._upload_status) @property def upload_errors(self): self.wait_for_element_to_be_displayed(self._upload_errors) return self.find_element(*self._upload_errors) def click_on_this_site_checkbox(self): self.wait_for_element_to_be_clickable(self._on_this_site_checkbox) return self.find_element(*self._on_this_site_checkbox).click() def click_on_your_own_text_checkbox(self): self.wait_for_element_to_be_clickable(self._on_your_own_text_checkbox) return self.find_element(*self._on_your_own_text_checkbox).click() def click_upload_addon_button(self): self.wait_for_element_to_be_clickable(self._upload_addon_button) self.find_element(*self._upload_addon_button).click() def upload_file(self, addon): # Upload given file on the AMO DevHub Validate Page button = self.find_element(*self._upload_addon_button) archive = Path(f"{os.getcwd()}/sample-addons/{addon}") button.send_keys(str(archive))