Selene ist eine kurze und leistungsstarke Bibliothek für das Schreiben von Browser -UI -Tests in Python. Es wurde als pythonischer Hafen des beliebten Selenide -Projekts aus der Java -Welt gebaut. Selene hilft Entwicklern dabei, lesbare und wartbare Tests zu schreiben, die gemeinsam Englisch "sprechen", wodurch sie leichter zu verstehen und über Teams zu teilen.
Selenes Kernstärke ist die benutzerorientierte API, die die Komplexität der Arbeit mit Selenium Webdriver abstrahiert. Tests können mit einfachen, ausdrucksstarken Syntax- und Unterstützungsfunktionen wie faul-evaluierten Elementen und automatischen Wiederholungsmechanismen für intelligentere implizite Warten auf Ajax-ähnliches Laden geschrieben werden. Mit integrierten PageObject-Unterstützung ermöglicht es die Wiederverwendbarkeit von Webelementen über Widgets.
By.* Tupelähnliche Locators komponieren, damit auch wiederverwendbare Elemente für verschiedene Komponenten erstellt werden können.ActionChains zu komponieren.Selene unterstützt derzeit zwei Hauptversionen:
Die neueste empfohlene Pre-Release-Version (v2.0.0rc9) :
3.8+>=4.12.0Stabile Version (v1.0.2) :
2.7, 3.5, 3.6, 3.7<4.0.0Für die Migration von v1.x nach v2.x folgen Sie dem Migrationshandbuch.
Von 1.0.2 bis 2.0.0rc<LATEST> :
2.0.0rc<LATEST>collection.first() von .first() bis .firstbe.* have.* text('foo')Beispiele für potenzielles Refactoring während der Migration:
(text('foo')) to (have.text('foo'))(visible) bis (be.visible).should(x, timeout=y) to .with_(timeout=y).should(x).should_not(be.*) to .should(be.not_.*) .should(be.*.not_).should_not(have.*) .should(have.no.*) .should(have.*.not_).should_each(condition) .should(condition.each)from selene import be, have Python 3.8+ ist erforderlich.
Angesichts der Installation von Pyenv ist die Installation der benötigten Version von Python einfach:
$ pyenv install 3.8.13
$ pyenv global 3.8.13
$ python -V
Python 3.8.13Stellen Sie sicher, dass Poesie und Pyenv installiert sind, und dann:
poetry new my-tests-with-selene
cd my-tests-with-selene
pyenv local 3.8.13
poetry add selene --allow-prereleases # for pre-release version
poetry installFür die Version vor der Veröffentlichung (für neue Projekte empfohlen):
pip install selene --preFür die neueste stabile Version:
pip install seleneWenn Sie SELene lieber direkt aus dem Quellcode installieren:
git clone https://github.com/yashaka/selene.git
cd selene
python setup.py installOder mit Gedichten:
poetry add git+https://github.com/yashaka/selene.gitOder mit PIP:
pip install git+https://github.com/yashaka/selene.gitAutomatisieren Sie eine einfache Google -Suche mit Selene:
from selene import browser , be , have
browser . open ( 'https://google.com/ncr' )
browser . element ( '[name=q]' ). should ( be . blank )
. type ( 'selenium' ). press_enter ()
browser . all ( '#rso>div' ). should ( have . size_greater_than ( 5 ))
. first . should ( have . text ( 'Selenium automates browsers' ))
# not mandatory, because will be closed automatically:
# browser.quit() Selene bietet eine intuitive API für die Interaktion mit Webelementen mithilfe von Modulen wie be , have by .
Faule und dynamische Elemente: Selene -Elemente sind faul und dynamisch, dh sie werden jedes Mal gefunden, wenn eine Aktion ausgeführt wird. Dies gewährleistet die Interaktion mit dem aktuellsten Element.
Hier ist eine grundlegende Element -Interaktion:
from selene import browser , by , be
# because elements are "lazy",
# you can store them in variable:
search_box = browser . element ( by . name ( 'q' ))
# – even before the actual page will be loaded:
browser . open ( 'https://google.com/ncr' )
search_box . should ( be . blank ). type ( 'Selenium' ). press_enter ()Die Auswahl der richtigen Elementlokatoren ist für zuverlässige Tests von entscheidender Bedeutung. Hier sind einige Tipps:
Überprüfen Sie das Element: Klicken Sie mit der rechten Maustaste auf das Webelement und wählen Sie, um die HTML in den Entwickler-Tools des Browsers anzuzeigen.
Verwenden Sie eindeutige Attribute: Suchen Sie nach eindeutigen Attributen wie ID, Name oder benutzerdefinierten Attributen, die in Ihren Selektoren verwendet werden können. Best Practice besteht darin, mit Entwicklern mit einzigartigen data-* speziell für Testanforderungen wie data-test-id zu verhandeln.
Konstruieren Sie CSS oder XPath -Selektoren: Erstellen Sie Selektoren, die Elemente eindeutig identifizieren. Beispielsweise verwenden Sie Conciser CSS-Selectors #elementId , .className oder [name="q"] oder verwenden Sie XPath für Dinge, die CSS nicht verarbeiten kann: //*[text()="Submit"]/.. Selene erkennt automatisch, ob Sie einen CSS- oder XPath -Selektor bereitstellen.
Verwenden Sie die Selene-Selektorhelfer (optional): Wenn Sie den meisten menschlich-lesbaren Code benötigen, können Sie by.name('q') , by.text('Submit') und anderen by.* Helfern verwenden. Beachten Sie, dass jemand RAW CSS -Selektor wie [name=q] übers by.name('q') zum Zweck des Kussprinzips bevorzugen würde.
Brechen Sie lange Selektoren in kleinere Teile ein, um eine bessere Lesbarkeit und Wartbarkeit zu erhalten: Wenn Sie ein Element finden, haben Sie einen komplexen Selektor wie in: browser.element('//*[@role="row" and contains(.,"Jon")]//*[@data-field="select-row"]') browser.all('[role=row]').element_by(have.text('Jon')).element('[data-field=select-row]') wird es einfacher machen, zu verstehen und zu warten, denn wenn etwas ändert, ändert sich etwas in der Struktur der Seite, und Ihr Test fällt aus, Sie sehen genau, wo es bei "Decomposed Teile" des Selektors. Im Folgenden müssen Sie jeden möglichen Ausfall des Versagens überprüfen.
Erstellen Sie eine benutzerdefinierte Selektorstrategie (optional): Stellen Sie sich vor, Ihre Frontend-Entwickler befolgen Best Practices und verwenden Sie data-test-id Attribute für alle Elemente, die in Tests behandelt werden müssen, und es ist eine Befolgung von Namen für solche Elemente, um Snake_Case_OR-Kebab-Case-Words zu sein. Mit Selenes browser.config.selector_to_by_strategy -Option können Sie eine benutzerdefinierte Selektorstrategie definieren, um alle solchen "snake_kebab-words" automatisch als Selektoren zu erkennen und in [data-test-id="snake_kebab-words"] Locators zu verwandeln. Dann ein Beispiel wie browser.all('[data-testid=result]').first.element('[data-testid=result-title-a]').click() kann zu browser.all('result').first.element('result-title-a').click() Sehen Sie, wie Sie die Suche nach Test -IDs vereinfachen? Leitfaden für weitere Details.
❗ Diese Funktion wird in der nächsten Veröffentlichung von Selene erhältlich sein.
Selene kann den Browser -Treiber automatisch für Sie verwalten, Sie können ihn jedoch bei Bedarf anpassen.
from selene import browser
browser . config . base_url = 'https://google.com'
browser . config . timeout = 2
browser . open ( '/ncr' ) from selenium import webdriver
from selene import browser
options = webdriver . ChromeOptions ()
options . add_argument ( '--headless' )
# Add other options as needed
# Selene will automatically detect the browser type (Chrome, Firefox, etc.)
# based on the options passed
browser . config . driver_options = options
browser . config . driver_remote_url = 'http://localhost:4444/wd/hub'
browser . config . base_url = 'https://google.com'
browser . config . timeout = 2
browser . open ( '/ncr' ) from selenium import webdriver
from selene import browser
options = webdriver . ChromeOptions ()
options . add_argument ( '--headless' )
# Add other options as needed
browser . config . driver = webdriver . Remote (
command_executor = 'http://localhost:4444/wd/hub' ,
options = options
)
browser . config . base_url = 'https://google.com'
browser . config . timeout = 2
browser . open ( '/ncr' )Verwenden Sie lesbare und stabile Selektoren: Ziel für Selektoren, die eindeutig, ausdrucksstark und minimal mit der DOM -Struktur gekoppelt sind, um Ihre Tests bewahrbarer zu machen.
Capsulate wiederverwendbare Komponenten: Verwenden Sie das Seitenobjektmodell, um Elemente und Aktionen zu verkapulieren und die Code -Wiederverwendung zu fördern.
Hebel integriert integriert: Selene wartet automatisch darauf, dass Elemente im gewünschten Zustand liegen und die Notwendigkeit expliziter Wartezeiten verringern.
Erforschen Sie die API: Tauchen Sie in den Quellcode oder die Dokumentation von Selene ein, um die verfügbaren Methoden und Konfigurationen besser zu verstehen.
Wir begrüßen Beiträge zu Selene! So können Sie sich engagieren:
Weitere Informationen finden Sie in unserem Beitragsführer.
Weitere Informationen zu aktuellen Updates finden Sie im Changelog.