Selene은 파이썬에서 브라우저 UI 테스트를 작성하기위한 간결하고 강력한 라이브러리입니다. 그것은 Java 세계에서 인기있는 셀레 나이드 프로젝트의 피스닉 항구로 지어졌습니다. Selene은 개발자가 공통 영어로 "말하면"읽기 쉽고 관리 가능한 테스트를 작성하여 팀 전체에서 이해하고 공유 할 수 있도록 도와줍니다.
Selene의 핵심 강점은 사용자 지향 API로 Selenium Webdriver와의 작업의 복잡성을 추상화합니다. 테스트는 간단하고 표현적인 구문을 사용하여 작성할 수 있으며 게으른 평가 요소, Ajax와 같은 하중을 대기하는 더 똑똑한 암시 적 재시도 메커니즘과 같은 지원 기능을 사용하여 작성할 수 있습니다. 내장 PageObject 지원을 통해 위젯을 통한 웹 요소의 재사용 가능성이 가능합니다.
By.*ActionChains 사용하여 사용자 정의 명령을 작성해야합니다.Selene은 현재 두 가지 주요 버전을 지원합니다.
최신 권장 프리 릴리스 버전 (v2.0.0RC9) :
3.8+>=4.12.0안정적인 버전 (v1.0.2) :
2.7, 3.5, 3.6, 3.7<4.0.0V1.x에서 V2.x로 마이그레이션하려면 마이그레이션 안내서를 따르십시오.
1.0.2 ~ 2.0.0rc<LATEST> :
2.0.0rc<LATEST> 로 업데이트하십시오collection.first() )에서 .first 로 collection.first .first() ) 메소드를 교체하십시오text('foo') 와 같은 모든 조건을 확인하십시오 be.* 또는 have.* 구문마이그레이션 중 잠재적 인 리팩토링의 예 :
(text('foo')) to (have.text('foo'))(visible) to (be.visible).should(x, timeout=y) 에서 .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 파이썬 3.8+가 필요합니다.
Pyenv가 설치되면 필요한 버전의 Python을 설치하는 것은 간단합니다.
$ pyenv install 3.8.13
$ pyenv global 3.8.13
$ python -V
Python 3.8.13시와 Pyenv가 설치되었는지 확인하십시오.
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 install사전 릴리스 버전의 경우 (새 프로젝트에 권장) :
pip install selene --pre최신 안정 버전의 경우 :
pip install selene소스 코드에서 직접 Selene을 설치하는 것이 좋습니다.
git clone https://github.com/yashaka/selene.git
cd selene
python setup.py install또는시 사용 :
poetry add git+https://github.com/yashaka/selene.git또는 PIP 사용 :
pip install git+https://github.com/yashaka/selene.gitSelene을 사용하여 간단한 Google 검색을 자동화하십시오.
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은 be , have 또는 by 같은 모듈을 사용하여 웹 요소와 상호 작용하는 직관적 인 API를 제공합니다.
게으르고 역동적 인 요소 : 셀렌 요소는 게으르고 역동적이며 행동이 수행 될 때마다 위치합니다. 이를 통해 최신 요소와의 상호 작용을 보장합니다.
기본 요소 상호 작용은 다음과 같습니다.
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 ()올바른 요소 로케이터를 선택하는 것은 안정적인 테스트에 중요합니다. 몇 가지 팁은 다음과 같습니다.
요소 검사 : 웹 요소를 마우스 오른쪽 단추로 클릭하고 브라우저의 개발자 도구에서 HTML을 보려면 검사를 선택하십시오.
고유 한 속성 사용 : 선택기에서 사용할 ID, 이름 또는 사용자 정의 속성과 같은 고유 한 속성을 찾으십시오. 모범 사례는 data-test-id 와 같은 테스트 요구를 위해 특별히 고유 한 data-* 속성을 사용하는 데 개발자와 협상하는 것입니다.
CSS 또는 XPATH SELECTORS 구성 : 요소를 고유하게 식별하는 선택기를 빌드하십시오. 예를 들어, Aconser CSS-Selectors #elementId , .className 또는 [name="q"] 사용하거나 CSS가 처리 할 수없는 것들에 대해 XPath를 사용합니다 : //*[text()="Submit"]/.. Selene은 CSS 또는 XPath 선택기를 제공하는지 자동으로 감지합니다.
Selene의 선택기 헬퍼 (선택 사항) 사용 : 인간이 읽을 수있는 대부분의 코드가 필요한 경우 by.name('q') , by.text('Submit') 및 기타 by.* 헬퍼를 사용할 수 있습니다. 키스 원칙을 목적으로 [name=q] 보다 by.name('q') 와 같은 원시 CSS 선택기를 선호합니다.
더 나은 가독성과 유지 관리를 위해 긴 선택기를 작은 부품으로 분류합니다. 요소를 찾으려면 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]') 페이지 구조의 구조가 변경되고 테스트가 실패하면 X-Pather가 실패하면 XONTERTER의 중간에 실패하면 XONTERTER가 실패하면 XONTER가 실패 할 수있는 경우 XONTERTER의 경우에만 실패 할 것입니다. 다음은 실패의 각 잠재적 인 이유를 다시 확인해야합니다.
사용자 정의 선택기 전략 생성 (선택 사항) : 프론트 엔드 개발자가 모범 사례를 따르고 테스트에서 다루어야하는 모든 요소에 대해 data-test-id 속성을 사용한다고 상상해보십시오. 그러한 요소가 Snake_case_or-Kebab-Case-Words가되기위한 이름 지정 규칙이 있습니다. Selene의 browser.config.selector_to_by_strategy 옵션을 사용하면 선택기로 전달 된 모든 "snake_kebab-words" 자동으로 감지하여 [data-test-id="snake_kebab-words"] 로케이터로 변환하기 위해 사용자 정의 선택기 전략을 정의 할 수 있습니다. 그런 다음 browser.all('[data-testid=result]').first.element('[data-testid=result-title-a]').click() 같은 예제를 browser.all('result').first.element('result-title-a').click() 로 단순화 할 수 있습니다. 테스트 ID로 검색을 단순화하는 방법을 보시겠습니까? 자세한 내용은 가이드.
❗이 기능은 다음 셀렌 릴리스에서 사용할 수 있습니다.
Selene은 브라우저 드라이버를 자동으로 관리 할 수 있지만 필요한 경우 사용자 정의 할 수 있습니다.
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' )읽기 쉽고 안정적인 선택기를 사용하십시오 : 독특하고 표현력이 있으며 최소한의 DOM 구조와 결합하여 테스트를보다 유지 관리 할 수 있도록 셀렉터를 목표로합니다.
재사용 가능한 구성 요소 캡슐화 : 페이지 객체 모델을 사용하여 요소 및 동작을 캡슐화하여 코드 재사용을 촉진합니다.
내장 대기 대기 : Selene은 자동으로 요소가 원하는 상태에있을 때까지 대기하여 명시 적 대기 시간이 줄어 듭니다.
API를 탐색하십시오 : Selene의 소스 코드 또는 문서로 뛰어 들어 사용 가능한 방법과 구성을 더 잘 이해하십시오.
우리는 셀렌에 대한 기여를 환영합니다! 참여할 수있는 방법은 다음과 같습니다.
자세한 내용은 기여 가이드를 참조하십시오.
최근 업데이트에 대한 자세한 내용은 ChangElog를 참조하십시오.