status-mobile/test/appium/views/base_element.py

76 lines
1.9 KiB
Python

from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException, TimeoutException
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions
import pytest
class BaseElement(object):
class Locator(object):
def __init__(self, by, value):
self.by = by
self.value = value
@classmethod
def xpath_selector(locator, value):
return locator(By.XPATH, value)
def __str__(self, *args, **kwargs):
return "%s:%s" % (self.by, self.value)
def __init__(self, driver):
self.driver = driver
self.locator = None
@property
def name(self):
return self.__class__.__name__
def navigate(self):
return None
def find_element(self):
try:
return self.wait_for_element()
except (NoSuchElementException, TimeoutException):
pytest.fail("'%s' not found by %s '%s'" % (
self.name, self.locator.by, self.locator.value), pytrace=False)
def wait_for_element(self, seconds=30):
return WebDriverWait(self.driver, seconds)\
.until(expected_conditions.presence_of_element_located((self.locator.by, self.locator.value)))
class BaseEditBox(BaseElement):
def __init__(self, driver):
super(BaseEditBox, self).__init__(driver)
self.driver = driver
def send_keys(self, value):
self.find_element().send_keys(value)
class BaseText(BaseElement):
def __init__(self, driver):
super(BaseText, self).__init__(driver)
self.driver = driver
@property
def text(self):
return self.find_element().text
class BaseButton(BaseElement):
def __init__(self, driver):
super(BaseButton, self).__init__(driver)
self.driver = driver
def click(self):
self.find_element().click()
return self.navigate()