1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/DingJunyao-nopo

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Nopo (Not Only Page Object) — это пакет для модели объекта страницы (POM), инструмента, основанного на Selenium, который помогает создавать POM в веб-тестах.

Особенности:

  • определение и управление элементом или элементами аналогично использованию Selenium (но с расширенными функциями);
  • автоматическое ожидание и поиск элемента (ов);
  • поддержка каскадных селекторов в элементе.

Установка:

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

Дальнейший план

  • Больше рабочих функций.
  • Готовые к использованию классы элементов для фронтенд-фреймворков (таких как Ant Design и Element).

Лицензия

Apache License Version 2.0

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Не только Page Object. Пакет о модели Page Object (PO модель, POM), основанный на Selenium, помогает вам создать POM в веб-тестировании. Развернуть Свернуть
Apache-2.0
Отмена

Обновления (3)

все

Участники

все

Язык

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/DingJunyao-nopo.git
git@api.gitlife.ru:oschina-mirror/DingJunyao-nopo.git
oschina-mirror
DingJunyao-nopo
DingJunyao-nopo
main