Nopo (Not Only Page Object) — это пакет для модели объекта страницы (POM), инструмента, основанного на Selenium, который помогает создавать POM в веб-тестах.
Особенности:
Установка:
pip install nopo
Использование:
Здесь приведён простой пример использования:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from nopo import El, Els, By, Pg
class GitHubPage(Pg):
# Определение аналогично Selenium
textbox = El(By.XPATH, '//input[@aria-label="Search GitHub"]')
main_page = El(By.TAG_NAME, 'main')
user_a = El(By.CLASS_NAME, 'mr-1')
name = El(By.XPATH, '//span[@itemprop="name"]')
def search_user(self, name):
# Управление аналогично Selenium, но с расширенными возможностями.
self.textbox.send_keys(name, clear=True)
self.textbox.send_keys(Keys.ENTER)
# Определение элементов
# Используйте El_1 / El_2 для определения каскадного элемента (ов)
# Используйте El(el=El_old) или Els(el=El_old), чтобы изменить тип
lis = Els(el=(self.main_page / El(By.XPATH, './/nav[1]') / El(By.TAG_NAME, 'a')))
lis[-1].click()
self.user_a.click()
assert self.name.value == 'Ding Junyao'
if __name__ == '__main__':
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://github.com/')
gh_page = GitHubPage(driver)
gh_page.search_user('DingJunyao')
driver.quit()
В классе, имеющем атрибут driver
для selenium webdriver (например, класс nopo.Pg
), вы можете определить его как атрибут класса:
example_el = El(by, selector_str)
example_els = Els(by, selector_str)
Вы также можете использовать атрибут driver
, чтобы указать webdriver или использовать в других случаях:
example_el = El(by, selector_str, driver=driver)
example_els = Els(by, selector_str, driver=driver)
el.text # Текст элемента.
el.value # Возвращает текст. Если текст None или '', возвращает свойство value (в основном для входного элемента).
el.exist # Показывает, существует ли элемент.
el.exist_wait # Показывает, существует ли элемент (с ожиданием).
el.is_selected # Возвращает, выбран ли элемент.
el.selectors_xpath # Возвращает селектор к xpath.
el.elem # Возвращает экземпляр WebElement элемента (с ожиданием).
el.elem_clickable # Возвращает экземпляр WebElement элемента (ожидание кликабельно).
el.elem_no_wait # Возвращает экземпляр WebElement элемента (без ожидания).
el.options # Возвращает список всех опций, принадлежащих этому тегу select
el.all_selected_options # Возвращает список всех выбранных опций, принадлежащих этому тегу select
el.first_selected_option # Возвращает первую выбранную опцию в этом теге select.
el.click() # Нажмите на элемент.
el.clear(force=False) # Очистите элемент. Используйте force=True, чтобы убедиться, что элемент можно очистить, чтобы справиться с некоторыми ситуациями.
el.send_keys(keys, clear=False, force_clear=False) # Отправьте ключи элементу. Если clear имеет значение True, очистите элемент перед отправкой. Если clear и force имеют значение True, clear будет работать в режиме силы.
el.csk(keys, force_clear=False) # Очистите и отправьте ключи элементу. Если force_clear имеет значение True, clear будет работать в режиме силы.
el.nn_csk(keys, force_clear=False) # Очистите и отправьте ключи, если keys не равно None. Если force_clear имеет значение True, clear будет работать в режиме силы.
el.get_attribute(attr) # Получите атрибут элемента.
el.get_property(property_text) # Получите свойство элемента.
el.wait_for_click() # Подождите, пока... Элемент является кликабельным.
`el.wait_for_present()` — ожидание появления элемента.
`el.select_by_value(value)` — выбор опций по заданному аргументу значения.
`el.select_by_index(index)` — выбор опции по указанному индексу.
`el.select_by_visible_text(text)` — выбор опций по видимому тексту.
`el.deselect_all()` — очистка всех выбранных записей.
`el.deselect_by_value(value)` — отмена выбора опций по заданному значению аргумента.
`el.deselect_by_index(index)` — отмена выбора опции по указанному индексу.
`el.deselect_by_visible_text(text)` — отмена выбора опций по видимому тексту.
`el.switch_in()` — переключение во фрейме.
`El.single_selector_to_xpath(by, selector)` — возвращает одиночный селектор в xpath.
### Каскадирование
Можно использовать `/` для каскадирования селекторов:
```python
el1 = El(by1, selector_str1)
el2 = El(by2, selector_str2)
example_el = el1 / el2
Тип example_el
выше такой же, как и у el1
, и находит элемент с использованием селектора el1
и el2
, подобно следующему коду в selenium:
el1 = driver.find_element.by(by1, selector_str1)
example_el = el1.find_element.by(by2, selector_str2)
Атрибут el
помогает передавать тип класса, что упрощает настройку элемента (элементов):
class MyEl(El):
pass
example_el = MyEl(el=el1 / el2)
pip install -r requirements.txt
python -m build
# или
python3 -m build
Apache License Version 2.0
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )