pages/desktop/developers/edit_addon.py (84 lines of code) (raw):
import os
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from pathlib import Path
from pages.desktop.base import Base
from pages.desktop.developers.submit_addon import SubmitAddon
class EditAddon(Base):
"""Edit page for a specific addon."""
_root_locator = (By.CLASS_NAME, "section")
_edit_addon_navbar_locator = (By.CLASS_NAME, "edit-addon-nav")
_addon_name_locator = (By.CSS_SELECTOR, ".section header h2")
_listed_addon_status_locator = (By.CSS_SELECTOR, ".addon-listed-status a")
_last_modified_date_locator = (By.CLASS_NAME, "date-updated")
_unlisted_version_tooltip_locator = (
By.CLASS_NAME,
"distribution-tag-unlisted.tooltip",
)
_submit_new_version_link_locator = (By.CLASS_NAME, "version-upload")
_manage_versions_link_locator = (
By.CSS_SELECTOR,
"#edit-addon-nav ul:nth-child(1) li:nth-child(3)",
)
_edit_addon_media_button_locator = (By.CSS_SELECTOR, "#edit-addon-media a")
_edit_addon_media_section_locator = (By.CSS_SELECTOR, "#edit-addon-media")
_edit_addon_describe_section_locator = (By.CSS_SELECTOR, "#addon-edit-describe")
_add_screenshot_button_locator = (By.CSS_SELECTOR, "#screenshot-upload")
_edit_previews_error_strong_locator = (By.CSS_SELECTOR, ".error > strong")
_edit_previews_explicit_error_locator = (By.CSS_SELECTOR, ".error > ul >li")
def wait_for_page_to_load(self):
self.wait.until(lambda _: self.is_element_displayed(*self._addon_name_locator))
return self
@property
def name(self):
self.wait_for_element_to_be_displayed(self._addon_name_locator)
return self.find_element(*self._addon_name_locator).text
@property
def listed_addon_status(self):
return self.find_element(*self._listed_addon_status_locator).text
def click_upload_version_link(self):
self.wait.until(
EC.element_to_be_clickable(self._submit_new_version_link_locator)
).click()
return SubmitAddon(self.selenium, self.base_url).wait_for_page_to_load()
@property
def unlisted_version_tooltip(self):
self.wait_for_element_to_be_displayed(self._unlisted_version_tooltip_locator)
return self.find_element(*self._unlisted_version_tooltip_locator)
@property
def last_modified_date(self):
"""Get the date string from the Last Update date section and format it"""
site_date = (
self.find_element(*self._last_modified_date_locator)
.text.split("Last Updated: ")[1]
.replace(".", "")
)
month = site_date.split()[0]
# get only the first three letters in the month to have a uniform date structure
final_date = site_date.replace(month, month[0:3])
return final_date
@property
def edit_addon_media_button(self):
return self.find_element(*self._edit_addon_media_button_locator)
@property
def edit_addon_media_section(self):
return self.find_element(*self._edit_addon_media_section_locator)
@property
def edit_addon_describe_section(self):
return self.find_element(*self._edit_addon_describe_section_locator)
@property
def screenshot_upload(self):
return self.find_element(*self._add_screenshot_button_locator)
@property
def edit_preview_error_strong(self):
return self.find_element(*self._edit_previews_error_strong_locator)
@property
def edit_preview_explicit_error(self):
return self.find_element(*self._edit_previews_explicit_error_locator)
def screenshot_file_upload(self, img):
self.wait_for_element_to_be_clickable(self._add_screenshot_button_locator)
button = self.find_element(*self._add_screenshot_button_locator)
archive = Path(f"{os.getcwd()}/sample-addons/{img}")
button.send_keys(str(archive))
def click_manage_versions_link(self):
self.wait_for_element_to_be_clickable(self._manage_versions_link_locator)
self.find_element(*self._manage_versions_link_locator).click()
from pages.desktop.developers.manage_versions import ManageVersions
return ManageVersions(self.driver, self.base_url).wait_for_page_to_load()