"Playwright", qui était un outil de test automatique E2E pour JavaScript, ** Il a été publié en avant-première sous le nom de "Playwright for Python" pour Python **, donc je l'ai immédiatement touché.
Announcing Playwright for Python: Reliable end-to-end testing for the web
Playwright est une bibliothèque qui automatise Chromium, Firefox et Webkit avec une seule API. Cela vous permettra d'effectuer des tests inter-navigateurs rapides et fiables.
Le Document officiel énonce les quatre points suivants. Ci-dessous ma traduction.
--Peut être installé sur une seule ligne.
À partir de là, j'écrirai en fait un cas de test. J'ai utilisé la page Réservation de chambre HOTEL PLANISPHERE (plan avec avantages spéciaux) pour la cible de test. .. Le cas de test était un test normal, "Accédez à la page à tester, définissez chaque paramètre, puis passez à la page de confirmation de réservation, et si le montant affiché est de 15 000 yens, passez".
Installer selon la description sur le GitHub officiel. Aussi, cette fois, nous utiliserons pytest pour le framework de test unitaire, donc cliquez sur Installer le plug-in pytest.
pip install playwright
python -m playwright install
pip install pytest-playwright
Cette fois, nous ne le ferons pas, mais si vous souhaitez effectuer un traitement asynchrone, veuillez faire pip install asyncio
séparément.
Avant de toucher Playwright, j'ai écrit un cas de test que je souhaite réaliser cette fois avec Selenium Webdriver comme référence. Il y a beaucoup d'instructions d'importation, de traitement en attente pour le contenu dynamique et de gestion de Webdriver pour chaque navigateur, donc c'est assez difficile.
selenium.py
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import Select, WebDriverWait
from webdriver_manager.chrome import ChromeDriverManager
class TestPlanisphere:
def test_reserve_otoku(self):
driver = webdriver.Chrome(ChromeDriverManager().install())
wait = WebDriverWait(driver, 10)
driver.get("https://hotel.testplanisphere.dev/ja/reserve.html?plan-id=0")
# NOTE: wait.until(EC.presence_of_all_elements_located) <-Ne marche pas
time.sleep(1) # HACK
date = driver.find_element_by_id("date") #Date de séjour
date.clear()
date.send_keys("2020/12/24")
date.send_keys(Keys.TAB)
term = driver.find_element_by_id("term") #nombre de séjours
term.clear()
term.send_keys("2")
head_count = driver.find_element_by_id("head-count") #Nombre de personnes
head_count.clear()
head_count.send_keys("1")
sightseeing = driver.find_element_by_id("sightseeing") #Sélectionnez «Plan touristique de grande valeur»
if not sightseeing.is_selected():
sightseeing.click()
driver.find_element_by_id("username").send_keys("Beribo") #Nom
Select(driver.find_element_by_id("contact")).select_by_value("tel") #"Je souhaite être contacté par téléphone"
driver.find_element_by_id("tel").send_keys("80120828828") #numéro de téléphone
driver.find_element_by_id("submit-button").click() #Transition vers la page de confirmation de réservation
wait.until(EC.presence_of_all_elements_located)
driver.save_screenshot("selenium.png ") #Prendre une capture d'écran
assert "15,000" in driver.find_element_by_id("total-bill").text
driver.quit()
Ensuite, j'ai écrit le même test avec Playwright pour Python. Les méthodes utilisées cette fois sont résumées dans les pages suivantes de la documentation officielle. Bien qu'il ne soit décrit qu'en JavaScript, il peut être utilisé presque entièrement en Python.
play.py
from playwright.sync_api import Page
class TestPlanisphere:
def test_reserve_otoku(self, page: Page):
page.goto("https://hotel.testplanisphere.dev/ja/reserve.html?plan-id=0")
page.waitForLoadState("networkidle")
page.fill("#date", "2020/12/24") #Date de séjour
page.press("#date", "Tab")
page.fill("#term", "2") #nombre de séjours
page.fill("#head-count", "1") #Nombre de personnes
page.check("#sightseeing") #Sélection du plan
page.fill("#username", "Beribo") #Nom
page.selectOption("#contact", "tel") #"Je souhaite être contacté par téléphone"
page.fill("#tel", "80120828828") #numéro de téléphone
page.click("#submit-button") #Transition vers la page de confirmation de réservation
page.waitForLoadState("networkidle")
page.screenshot(path="playwright.png ") #Prendre une capture d'écran
assert "15,000" in page.innerText("#total-bill")
page.close()
Comparé au sélénium
Vous pouvez voir que la partie difficile de Selenium a été résolue avec brio rien qu'en regardant le script.
Il ne vous reste plus qu'à exécuter le play.py ci-dessus dans pytest. Headless / headful, le navigateur d'exécution peut être spécifié comme option au moment de l'exécution.
Vous pouvez également enregistrer les options de démarrage dans le fichier pytest.ini
. ](Https://github.com/microsoft/playwright-pytest#usage)
#Essai(Le chrome sans tête est la valeur par défaut)
pytest play.py
#Test de fonctionnement en mode entête
pytest --headful play.py
#Tester l'exécution en spécifiant un navigateur(chromium, firefox, webkit)
pytest --browser firefox play.py
#Test exécuté sur plusieurs navigateurs
pytest --browser chromium --browser webkit play.py
Je pense qu'il y a deux directions pour l'évolution des outils automatisés, Je pense que l'un est d'évoluer en tant que plate-forme de test multifonctionnelle qui intègre des fonctions de reporting et des fonctions CI, et l'autre est d'évoluer en tant qu'outil programmable léger, à grande vitesse. Je sentais que le dramaturge serait une option puissante pour ce dernier.
Le soutien d'un géant appelé Microsoft (et l'origine est Puppeteer de Google ...) est très puissant en tant qu'OSS, et des améliorations futures peuvent être attendues, alors j'ai pensé qu'il serait bon de commencer à partir de maintenant la version préliminaire. pense.
Pour être honnête, j'ai personnellement estimé que c'était beaucoup plus facile et moins coûteux à apprendre que le sélénium, je donnerai donc la priorité au sélénium lorsqu'il pourra être utilisé!
Recommended Posts