Selene adalah perpustakaan yang ringkas dan kuat untuk menulis tes UI browser di Python. Itu dibangun sebagai pelabuhan pythonic dari proyek Selenide yang populer dari Java World. Selene membantu pengembang menulis tes yang dapat dibaca dan dapat dipelihara yang "berbicara" dalam bahasa Inggris yang sama, membuatnya lebih mudah dipahami dan dibagikan di seluruh tim.
Kekuatan inti Selene adalah API yang berorientasi pengguna, yang mengabstraksi kompleksitas bekerja dengan Selenium Webdriver. Tes dapat ditulis menggunakan sintaksis yang sederhana dan ekspresif dan fitur dukungan seperti elemen yang dievaluasi malas, mekanisme coba lagi otomatis untuk lebih pintar menunggu pemuatan seperti Ajax. Dengan dukungan pageObject bawaan, ini memungkinkan penggunaan kembali elemen web melalui widget.
By.* Locator seperti tuple, memungkinkan juga untuk membuat elemen yang dapat digunakan kembali untuk komponen yang berbeda.ActionChains .Selene saat ini mendukung dua versi utama:
Versi pra-rilis terbaru yang direkomendasikan (v2.0.0rc9) :
3.8+>=4.12.0Versi stabil (v1.0.2) :
2.7, 3.5, 3.6, 3.7<4.0.0Untuk migrasi dari v1.x ke v2.x, ikuti panduan migrasi.
Dari 1.0.2 hingga 2.0.0rc<LATEST> :
2.0.0rc<LATEST>collection.first() dari .first() ke .firsttext('foo') Gunakan be.* Atau have.* SintaksContoh potensi refactoring selama migrasi:
(text('foo')) ke (have.text('foo'))(visible) ke (be.visible).should(x, timeout=y) to .with_(timeout=y).should(x).should_not(be.*) to .should(be.not_.*) atau .should(be.*.not_).should_not(have.*) to .should(have.no.*) atau .should(have.*.not_).should_each(condition) ke .should(condition.each)from selene import be, have Diperlukan Python 3.8+.
Diberikan pyenv diinstal, menginstal versi python yang diperlukan sederhana:
$ pyenv install 3.8.13
$ pyenv global 3.8.13
$ python -V
Python 3.8.13Pastikan puisi dan pyenv dipasang, lalu:
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 installUntuk versi pra-rilis (direkomendasikan untuk proyek baru):
pip install selene --preUntuk versi stabil terbaru:
pip install seleneJika Anda lebih suka menginstal Selene langsung dari kode sumber:
git clone https://github.com/yashaka/selene.git
cd selene
python setup.py installAtau menggunakan puisi:
poetry add git+https://github.com/yashaka/selene.gitAtau menggunakan PIP:
pip install git+https://github.com/yashaka/selene.gitOtomatis pencarian Google sederhana menggunakan 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 menyediakan API intuitif untuk berinteraksi dengan elemen web menggunakan modul seperti be , have atau by .
Elemen malas dan dinamis: Elemen Selene malas dan dinamis, artinya mereka berada setiap kali tindakan dilakukan. Ini memastikan interaksi dengan elemen terbaru.
Berikut ini adalah interaksi elemen dasar:
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 ()Memilih elemen pencari lokasi yang benar sangat penting untuk tes yang andal. Berikut beberapa tips:
Periksa elemen: Klik kanan pada elemen web dan pilih Periksa untuk melihat HTML-nya di alat pengembang browser.
Gunakan atribut unik: Cari atribut unik seperti ID, nama, atau atribut khusus untuk digunakan dalam pemilih Anda. Praktik terbaik adalah bernegosiasi dengan pengembang tentang menggunakan data-* atribut khusus untuk kebutuhan pengujian, seperti data-test-id .
Bangun pemilih CSS atau XPATH: Bangun pemilih yang secara unik mengidentifikasi elemen. Misalnya, menggunakan CSS-Selectors-Selectors #elementId , .className , atau [name="q"] , atau menggunakan xpath untuk hal-hal yang tidak dapat ditangani CSS: //*[text()="Submit"]/.. Selene akan secara otomatis mendeteksi apakah Anda menyediakan pemilih CSS atau XPath.
Manfaatkan Pembantu Pemilih Selene (Opsional): Jika Anda membutuhkan sebagian besar kode yang dapat dibaca manusia, Anda dapat menggunakan by.name('q') , by.text('Submit') dan lainnya by.* Pembantu. Perhatikan, bahwa seseorang lebih suka pemilih CSS mentah seperti [name=q] over by.name('q') untuk tujuan prinsip ciuman.
Break down long selectors into smaller parts for better readability and maintainability: If to find an element you have a complex selector like in: browser.element('//*[@role="row" and contains(.,"Jon")]//*[@data-field="select-row"]') , decomposing it utilizing Selene's filtering collections API to browser.all('[role=row]').element_by(have.text('Jon')).element('[data-field=select-row]') will make it easier to understand and maintain, because if something changes in the structure of the page, and your test fails, you will see exactly where it fails among "decomposed parts" of the selector, while in case of longer XPath selector you will see only that it fails somewhere in the middle of the long Pemilih dengan kebutuhan berikut untuk memeriksa ulang setiap alasan kegagalan potensial.
Buat Strategi Pemilih Kustom (Opsional): Bayangkan pengembang frontend Anda mengikuti praktik terbaik dan menggunakan atribut data-test-id untuk semua elemen yang perlu dibahas dalam tes, dan ada konvensi penamaan yang diikuti untuk elemen tersebut untuk menjadi kata-kasus Snake_Case_or-keebab. Dengan opsi selene's browser.config.selector_to_by_strategy Anda dapat mendefinisikan strategi pemilih kustom untuk secara otomatis mendeteksi semua "snake_kebab-words" yang dilewatkan sebagai pemilih dan mengubahnya menjadi pelatih [data-test-id="snake_kebab-words"] . Maka contoh seperti browser.all('[data-testid=result]').first.element('[data-testid=result-title-a]').click() dapat disederhanakan ke browser.all('result').first.element('result-title-a').click() . Lihat Cara Menyederhanakan Pencarian dengan ID Uji? Panduan untuk detail lebih lanjut.
Fitur Fitur ini akan tersedia di rilis Selene berikutnya.
Selene dapat secara otomatis mengelola driver browser untuk Anda, tetapi Anda dapat menyesuaikannya jika diperlukan.
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' )Gunakan pemilih yang dapat dibaca dan stabil: Tujuan untuk pemilih yang unik, ekspresif, dan digabungkan secara minimal dengan struktur DOM untuk membuat tes Anda lebih dapat dipelihara.
Encapsulate komponen yang dapat digunakan kembali: Memanfaatkan model objek halaman untuk merangkum elemen dan tindakan, mempromosikan penggunaan kembali kode.
Leverage Tunggu bawaan: Selene secara otomatis menunggu elemen berada dalam keadaan yang diinginkan, mengurangi kebutuhan untuk menunggu eksplisit.
Jelajahi API: Menyelam ke dalam kode sumber atau dokumentasi Selene untuk memahami metode dan konfigurasi yang tersedia dengan lebih baik.
Kami menyambut kontribusi untuk Selene! Inilah cara Anda bisa terlibat:
Untuk detail lebih lanjut, lihat panduan kontribusi kami.
Lihat Changelog untuk detail lebih lanjut tentang pembaruan terbaru.