"Playwright", ein automatisches E2E-Testwerkzeug für JavaScript, ** Es wurde als "Playwright for Python" für Python ** in der Vorschau veröffentlicht, also habe ich es sofort berührt.
Announcing Playwright for Python: Reliable end-to-end testing for the web
Playwright ist eine Bibliothek, die Chromium, Firefox und Webkit mit einer einzigen API automatisiert. Auf diese Weise können Sie schnelle und zuverlässige browserübergreifende Tests durchführen.
Das offizielle Dokument enthält die folgenden vier Punkte. Unten ist meine Übersetzung.
Von hier aus werde ich tatsächlich einen Testfall schreiben. Ich habe die Seite HOTEL PLANISPHERE Zimmerreservierung (Plan mit besonderen Vorteilen) für das Testziel verwendet. .. Der Testfall war ein normaler Test: "Greifen Sie auf die zu testende Seite zu, stellen Sie jeden Parameter ein und wechseln Sie dann zur Reservierungsbestätigungsseite. Wenn der dort angezeigte Betrag 15.000 Yen beträgt, bestehen Sie ihn."
Installiere gemäß der Beschreibung auf dem offiziellen GitHub. Dieses Mal verwenden wir auch pytest für das Unit-Test-Framework. Klicken Sie daher auf Installieren Sie das pytest-Plug-In.
pip install playwright
python -m playwright install
pip install pytest-playwright
Dieses Mal werden wir es nicht tun, aber wenn Sie eine asynchrone Verarbeitung durchführen möchten, führen Sie bitte pip install asyncio
separat durch.
Bevor ich Playwright berührte, schrieb ich einen Testfall, den ich diesmal mit Selenium Webdriver als Referenz realisieren möchte. Es gibt viele Importanweisungen, die auf die Verarbeitung dynamischer Inhalte warten und die Verwaltung von Webdriver für jeden Browser. Daher ist dies ziemlich schwierig.
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) <-Funktioniert nicht
time.sleep(1) # HACK
date = driver.find_element_by_id("date") #Datum des Aufenthalts
date.clear()
date.send_keys("2020/12/24")
date.send_keys(Keys.TAB)
term = driver.find_element_by_id("term") #Anzahl der Aufenthalte
term.clear()
term.send_keys("2")
head_count = driver.find_element_by_id("head-count") #Anzahl der Personen
head_count.clear()
head_count.send_keys("1")
sightseeing = driver.find_element_by_id("sightseeing") #Wählen Sie "Great Value Sightseeing Plan"
if not sightseeing.is_selected():
sightseeing.click()
driver.find_element_by_id("username").send_keys("Beribo") #Name
Select(driver.find_element_by_id("contact")).select_by_value("tel") #"Ich möchte telefonisch kontaktiert werden"
driver.find_element_by_id("tel").send_keys("80120828828") #Telefonnummer
driver.find_element_by_id("submit-button").click() #Übergang zur Reservierungsbestätigungsseite
wait.until(EC.presence_of_all_elements_located)
driver.save_screenshot("selenium.png ") #Mache ein Bildschirmfoto
assert "15,000" in driver.find_element_by_id("total-bill").text
driver.quit()
Dann habe ich den gleichen Test mit Playwright für Python geschrieben. Die diesmal verwendeten Methoden sind auf den folgenden Seiten der offiziellen Dokumentation zusammengefasst. Obwohl es nur in JavaScript beschrieben wird, kann es fast ausschließlich in Python verwendet werden.
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") #Datum des Aufenthalts
page.press("#date", "Tab")
page.fill("#term", "2") #Anzahl der Aufenthalte
page.fill("#head-count", "1") #Anzahl der Personen
page.check("#sightseeing") #Planauswahl
page.fill("#username", "Beribo") #Name
page.selectOption("#contact", "tel") #"Ich möchte telefonisch kontaktiert werden"
page.fill("#tel", "80120828828") #Telefonnummer
page.click("#submit-button") #Übergang zur Reservierungsbestätigungsseite
page.waitForLoadState("networkidle")
page.screenshot(path="playwright.png ") #Mache ein Bildschirmfoto
assert "15,000" in page.innerText("#total-bill")
page.close()
Im Vergleich zu Selen
Sie können sehen, dass der schwierige Teil von Selenium hervorragend gelöst wurde, wenn Sie sich nur das Drehbuch ansehen.
Alles was Sie jetzt tun müssen, ist die obige play.py in pytest auszuführen. Headless / Headful und Ausführungsbrowser können als Ausführungsoptionen angegeben werden.
Sie können die Startoptionen auch in der Datei pytest.ini
speichern. ](Https://github.com/microsoft/playwright-pytest#usage)
#Testlauf(Headless Chromium ist die Standardeinstellung)
pytest play.py
#Testlauf im Headful-Modus
pytest --headful play.py
#Testen Sie die Ausführung, indem Sie einen Browser angeben(chromium, firefox, webkit)
pytest --browser firefox play.py
#Testlauf auf mehreren Browsern
pytest --browser chromium --browser webkit play.py
Ich denke, es gibt zwei Richtungen für die Entwicklung automatisierter Werkzeuge: Ich denke, eine soll sich als multifunktionale Testplattform entwickeln, die Berichtsfunktionen und CI-Funktionen integriert, und die andere soll sich als leichtes, programmierbares Hochgeschwindigkeitstool entwickeln. Ich hatte das Gefühl, dass Dramatiker eine mächtige Option für Letzteres sein würde.
Die Unterstützung eines Riesen namens Microsoft (und der Ursprung ist Googles Puppenspieler ...) ist als OSS sehr leistungsfähig, und zukünftige Verbesserungen sind zu erwarten. Daher dachte ich, es wäre gut, ab sofort mit der Vorschau-Version zu beginnen. Überlegen.
Um ehrlich zu sein, hatte ich persönlich das Gefühl, dass das Lernen viel einfacher und kostengünstiger ist als Selen, daher werde ich Selen Vorrang einräumen, wenn es verwendet werden kann!
Recommended Posts