Selene é uma biblioteca concisa e poderosa para escrever testes de interface do navegador no Python. Foi construído como um porto pitônico do popular projeto Seleneide do mundo Java. Selene ajuda os desenvolvedores a escrever testes legíveis e sustentáveis que "falam" em inglês comum, tornando -os mais fáceis de entender e compartilhar entre as equipes.
A força principal de Selene é sua API orientada ao usuário, que abstrava a complexidade de trabalhar com o Selenium Webdriver. Os testes podem ser escritos usando sintaxe simples e expressiva e recursos de suporte, como elementos preguiçosos com avaliação, mecanismos automáticos de tentativa de espera mais inteligente, aguardando por carga semelhante ao Ajax. Com suporte de PageObject embutido, ele permite a reutilização de elementos da Web através de widgets.
By.* Localizadores semelhantes à tupla, permitindo também criar elementos reutilizáveis para diferentes componentes.ActionChains .Atualmente, Selene suporta duas versões principais:
Versão pré-lançamento recomendada mais recente (v2.0.0rc9) :
3.8+>=4.12.0Versão estável (v1.0.2) :
2.7, 3.5, 3.6, 3.7<4.0.0Para migração de v1.x para v2.x, siga o guia de migração.
De 1.0.2 a 2.0.0rc<LATEST> :
2.0.0rc<LATEST>collection.first() de .first() para .firsttext('foo') use o be.* Ou have.* SintaxeExemplos de potencial refatoração durante a migração:
(text('foo')) para (have.text('foo'))(visible) para (be.visible).should(x, timeout=y) para .with_(timeout=y).should(x).should_not(be.*) .should(be.not_.*) .should(be.*.not_).should_not(have.*) .should(have.no.*) .should(have.*.not_).should_each(condition) para .should(condition.each)from selene import be, have Python 3.8+ é necessário.
Dado que o PYENV está instalado, a instalação da versão necessária do Python é simples:
$ pyenv install 3.8.13
$ pyenv global 3.8.13
$ python -V
Python 3.8.13Verifique se a poesia e o pyenv estão instaladas e depois:
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 installPara a versão pré-lançamento (recomendada para novos projetos):
pip install selene --prePara a última versão estável:
pip install seleneSe você preferir instalar Selene diretamente do código -fonte:
git clone https://github.com/yashaka/selene.git
cd selene
python setup.py installOu usando poesia:
poetry add git+https://github.com/yashaka/selene.gitOu usando PIP:
pip install git+https://github.com/yashaka/selene.gitAutomatize uma pesquisa simples no Google usando o 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 fornece uma API intuitiva para interagir com elementos da Web usando módulos como be , have ou by .
Elementos preguiçosos e dinâmicos: os elementos de Selene são preguiçosos e dinâmicos, o que significa que estão localizados sempre que uma ação é realizada. Isso garante a interação com o elemento mais atualizado.
Aqui está uma interação básica de elemento:
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 ()A escolha dos localizadores de elementos corretos é crucial para testes confiáveis. Aqui estão algumas dicas:
Inspecione o elemento: clique com o botão direito do mouse no elemento da web e selecione Inspecionar para visualizar seu HTML nas ferramentas de desenvolvedor do navegador.
Use atributos exclusivos: procure atributos exclusivos como ID, nome ou atributos personalizados a serem usados em seus seletores. A melhor prática é negociar com os desenvolvedores sobre o uso data-* exclusivos data-test-id
Construa seletores CSS ou XPath: Crie seletores que identificam exclusivamente elementos. Por exemplo, usando o conciser CSS-Selectores #elementId , .className ou [name="q"] ou usando xpath para coisas que o CSS não pode lidar: //*[text()="Submit"]/.. Selene detectará automaticamente se você fornecerá um seletor CSS ou XPath.
Utilize os ajudantes de seletor de Selene (opcional): se você precisar da maioria do código legível pelo homem, poderá usar by.name('q') , by.text('Submit') e outros by.* Ajudantes. Observe que alguém preferiria seletor CSS bruto como [name=q] by.name('q') para o propósito do princípio do beijo.
Divida os longos seletores em peças menores para melhor legibilidade e manutenção: se encontrar um elemento, você terá um seletor complexo como em: browser.element('//*[@role="row" and contains(.,"Jon")]//*[@data-field="select-row"]') , decompondo-o utilizando a filtragem de selene da filtragem da selene da filtragem de selene da filtragem de selene da seleção 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 selector with A seguinte necessidade de verificar cada um potencial motivo de falha.
Crie estratégia seletora personalizada (opcional): imagine que seus desenvolvedores de front-end sigam as melhores práticas e use atributos de data-test-id para todos os elementos que precisam ser abordados em testes, e há uma convenção de nomenclatura seguida para que esse elemento seja Snake_Case_OR-KEBAB-CASE-Words. Com browser.config.selector_to_by_strategy da Selene, você pode definir uma estratégia de seletor personalizado para detectar automaticamente todas essas "snake_kebab-words" passadas como seletores e transformá-los em localizadores [data-test-id="snake_kebab-words"] . Em seguida, um exemplo como browser.all('[data-testid=result]').first.element('[data-testid=result-title-a]').click() pode ser simplificado para browser.all('result').first.element('result-title-a').click() . Veja como simplificar a pesquisa por IDs de teste? Guia para mais detalhes.
❗Este recurso estará disponível no próximo lançamento de Selene.️
A Selene pode gerenciar automaticamente o driver do navegador para você, mas você pode personalizá -lo, se necessário.
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' )Use seletores legíveis e estáveis: AIM para seletores exclusivos, expressivos e minimamente acoplados à estrutura DOM para tornar seus testes mais sustentáveis.
Encapsular componentes reutilizáveis: Utilize o modelo de objeto da página para encapsular elementos e ações, promovendo a reutilização do código.
Aproveite a espera integrada: Selene aguarda automaticamente os elementos estarem no estado desejado, reduzindo a necessidade de esperas explícitas.
Explore a API: mergulhe no código -fonte ou documentação de Selene para entender melhor os métodos e configurações disponíveis.
Congratulamo -nos com contribuições para Selene! Veja como você pode se envolver:
Para mais detalhes, consulte o nosso guia de contribuição.
Consulte o Changelog para obter mais detalhes sobre atualizações recentes.