Plugin for running pyppeteer in pytest.
Project description
pytest-pyppeteer
Test with pyppeteer in pytest.
Installation
Requirements
pytest-pyppeteer work with Python >=3.6.
Install pytest-pyppeteer
pip install pytest-pyppeteer
or install latest one:
pip install git+https://github.com/luizyao/pytest-pyppeteer.git
Quickstart
For example, compare the scores of a book and its movie on Douban.
--nptp, --new-pyppeteer-test-project
Create a new pyppeteer test project in the specified path.
pytest --nptp=douban
The directory structure:
├── desc
├── pyproject.toml
└── test_douban.py
1 directory, 2 files
Configuration
desc
Create two files douban_movie.desc
and douban_book.desc
in desc
directory.
[HomePage]
is required.
# douban_movie.desc
[HomePage]
#CSS
search_input = '#inp-query'
search_apply = '.inp-btn > input:nth-child(1)'
[SearchResultsPage]
# {} indicates that this part can be replaced by the custom parameter
# CSS
result = '#root > div > div > div > div > div:nth-child({}) > div.item-root a.cover-link'
[DetailPage]
rating = '#interest_sectl > div.rating_wrap.clearbox > div.rating_self.clearfix > strong'
# douban_book.desc
[HomePage]
#CSS
search_input = '#inp-query'
search_apply = '.inp-btn > input:nth-child(1)'
[SearchResultsPage]
# {} indicates that this part can be replaced by the custom parameter
# Xpath
result = '(//*[@class="item-root"])[{}]/a'
[DetailPage]
rating = '#interest_sectl > div > div.rating_self.clearfix > strong'
pyproject.toml
Add target
:
[tool.pytest.pyppeteer.targets]
[tool.pytest.pyppeteer.targets.target1]
name = "douban_movie"
base_url = "https://movie.douban.com/"
[tool.pytest.pyppeteer.targets.target2]
name = "douban_book"
base_url = "https://book.douban.com/"
Path executablePath
to a Chromium or Chrome executable.
[tool.pytest.pyppeteer.options]
executablePath = "/Applications/Chrome.app/Contents/MacOS/Google Chrome"
Write tests
# test_douban.py
import asyncio
from functools import partial
import pytest
from pytest_pyppeteer.models import Pyppeteer
async def query_rating(target: Pyppeteer, movie_or_book_name: str):
await target.open(goto_base_url=True)
await target.input("search_input", text=movie_or_book_name)
await target.click("search_apply")
# Into search results page
target.switch_page("SearchResultsPage")
# Click the first result
await target.click("result", custom_parameter=(1,))
# Into detail page
target.switch_page("DetailPage")
rating: str = await target.get_value("rating")
await target.close()
return rating
@pytest.mark.parametrize("target", [("target1", "target2")], indirect=True)
async def test_shawshank_rating(target):
target1, target2 = target
shawshank_rating = partial(query_rating, movie_or_book_name="肖申克的救赎")
movie_rating, book_rating = await asyncio.gather(
shawshank_rating(target1), shawshank_rating(target2)
)
assert movie_rating == book_rating
Execute tests screenshot
License
Changelog
0.1.1 (2020-08-22)
Added
- ✨ add target.hover function [c0fe87e]
Fixed
More details refer to CHANGELOG.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
pytest-pyppeteer-0.1.1.tar.gz
(12.8 kB
view hashes)
Built Distribution
Close
Hashes for pytest_pyppeteer-0.1.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 832579f6160afd4e984f7b14488e31e57cb12292287f0577fe961ee12ede4426 |
|
MD5 | c01bb94f13eb8ef1069fafaee74beb50 |
|
BLAKE2b-256 | f29f6308788a72309a517410df1b9e0fb64e1e8355ffd3494f9a22f7d62f2864 |