English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
회사에서 코드 리뷰를 할 때 코드를 볼 시간을 제한했습니다. 실제로 많은 코드는 프레임워크가 자동으로 생성하므로 많은 시간을 보내지 않아도 됩니다. 목표를 달성하기 위해 시간을 채우기 위해(마우스를 사용하여 웹 페이지의 고정된 영역을 클릭하며) 자동화 테스트 방법을 사용할 수 있습니다.
먼저, 요구 사항을 명확히 하세요:
제가 생각한 방안은 두 가지입니다. sikuli나 python+selenium을 간단히 기록해 두겠습니다. sikuli는 논리적 연산이 간단하고 직접적이며, 이미지를 사용하여 표시하는 장점이 있지만, 창이 고정되어 있어야 하며 배경에서 실행할 수 없는 단점이 있습니다. selenium은 조금 복잡하지만, 실행 속도가 빠르며, 창을 가리칠 수 있습니다.
여기서 Python을 사용하여+selenium의 간단한 예제.
사용하는 버전은 Python3.3또한 selenium2, Windows 환경(지금은 지원됩니다)3.0 이상이 되었지만, 많은 포럼과 블로그는 업데이트되지 않았습니다).
먼저 소프트웨어 설치에 대해 설명드리겠습니다. Python에 대해서는 설명하지 않겠습니다. 환경 변수를 설정하시기 바랍니다.
아래에서 selenium을 설치합니다. pip이 이미 설치되어 있다면, 명령어를 직접 실행하세요.
pip install -U selenium
또 다른 방법은,https://pypi.python.org/packages/source/s/selenium/selenium-2.52.0.tar.gz다운로드하고 압축을 풀어주세요. 여기서 Windows 버전에 대해 간단히 설명드리겠습니다. 사실 Unix에서도 비슷하게, Wget를 사용하여 설치를 다운로드하세요.
使用命令(setup一般用于第三方模块的安装):
コマンドを使用して(setupは通常、サードパーティモジュールのインストールに使用されます):3cd c:\Python \xxxx
python setup.py install
インストールプロセス中にImportError: No module named setuptoolsが発生することがあります。これはsetuptoolsモジュールが欠けているため、Pythonのデフォルトではインストールされていないためです。http://pypi.python.org/pypi/setuptools上記には各システムのインストールパッケージとインストールガイドが提供されています。Windowsシステムの場合、以下をダウンロードしてください:https://bootstrap.pypa.io/ez_setup.py自動インストールスクリプト。
実行:
python ez_setup.py
完了したら、Seleniumをインストールします。
ここでは、私の簡単な例を使用して手順を説明します。
最初にブラウザを開くことを完了します。
selenium2Seleniumとwebdriverを組み合わせて、各ブラウザの対応するドライバーを直接インポートし、開くだけで済みます。ただし、Chromeドライバーは別途インストールする必要がある場合があります。
from selenium import webdriver browser = webdriver.Firefox() browser.get('https://www.xxx.com')
ウェブページを開いてログインする必要があります、F12ブラウザのデバッグツールを開き、小さな矢印で要素を選択し、ログインボックスのアカウントとパスワードの属性を確認します。一般的にはIDがあります。Seleniumは以下の各方法を使用して要素を取得し、さまざまな操作を行うことができます。詳細は上記リンクドキュメントを参照してください:
その中でidが最も有効で便利であり、優先考慮します。要素を選択した後、WebDriver APIを使用してキーボードの入力やマウスのクリック操作をシミュレートできます。以下のようになります:
username="qun" passwd="passwd" browser = webdriver.Firefox() browser.get('https://www.xxx.com') browser.implicitly_wait(10) elem=browser.find_element_by_id("loginFormUserName") elem.send_keys(username) elem=browser.find_element_by_id("loginFormPassword") elem.send_keys(passwd) elem=browser.find_element_by_id("loginFormSubmit") ))
일반적으로 로그인 후 페이지가 새로운 페이지로 이동합니다. 새로운 페이지를 얻는 방법은? 여기서 창 핸들 개념이 있습니다. 창 핸들을 통해 전환합니다. 주의! 요소가 frame 내에 있을 때, switch를 통해 전환해야 할 수도 있습니다. 여기서 wait 함수(위에도 있음)가 나오는 이유는 페이지 로드가 시간이 걸릴 수 있기 때문입니다. 클릭한 후 요소가 로드되지 않을 수 있기 때문입니다. 다음 장에서 자세히 설명할 것입니다.
browser.implicitly_wait(10) browser.switch_to_window(browser.window_handles[-1]
이후 클릭해야 할 영역을 선택합니다. 여기서 xpath를 사용하는 이유는, 자동화 테스트 과정에서 요소가 id, name 등의 방법으로 정위치되지 않을 수 있다는 점입니다. (때로는 table 안에 table을 넣어 두는 사람도 많습니다. 저는 이렇게 하지 않습니다.), xpath가 사용될 수 있는 이유입니다. 일반적으로 Firefox에서 xpath 플러그인을 설치하고, 우클릭하여 직접 가져올 수 있습니다. 이 부분은 소개하지 않습니다. 왜냐하면 추천하지 않기 때문입니다. 플러그인을 사용하면 코드에 이러한 것들이 많이 들어갈 수 있습니다:
XPath(/html/body/div/div[3]/div[2]/div[4]/p[2])
가능한 한, 요소의 특성을 통해 정위치시키기를 권장합니다. 예를 들어, 버튼의 name.
또는 부모 요소를 통해 자식 요소를 정위치시키는 방법을 사용할 수 있습니다。
username =browser.find_element_by_xpath("//input[@name='username']") clear_button = browser.find_element_by_xpath("//form[@id='loginForm']/input[4]")
아래와 같은 코드입니다. 인터넷에서 자주 나오는 By의 사용 방법을 사용하려면 패키지를 가져오는 것이 필요합니다.
from selenium.webdriver.common.by import By
여기서 다른 함수를 사용하고, 그 차이를 알지 못합니다- -。
for i in range(100): elem=WebDriverWait(browser, 30).until( lambda x:x.find_element_by_xpath("//table[@class='aaa']"/table[@class='aaa']"1td[ )) time.sleep(20) elem.click()
print ("click",i)2然后这里还要提一下wait函数,在selenium
中延迟等待分为两种,显示等待和隐式等待。
显示等待
显式等待,就是明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到,就一直等,除非在规定的时间之内都没找到,那么就跳出Exception。 10).until( EC.presence_of_element_located((By.ID, "myDynamicElement")) )
은답적 대기
주의하세요. 은답적 대기는 모든 dom 요소가 특정 요소를 찾는 동안 즉시 찾지 못하면, 이 기간 동안 다시 시도할 것을 알립니다.
browser.implicitly_wait(10) # 초
두 가지의 차이는 하나는 직접 텀 오브젝트를 관리하고, 다른 하나는 webdriver에 맡겨서 관리하는 것입니다.
물론 대기 방법을 사용하여 무작위로 기다릴 수도 있습니다. time 패키지를 가져오세요.
time.sleep(20)
이곳은 단순히 사용법을 시연하는 것에 불과하며, 많은 개선할 수 있는 점이 있습니다. 함수를 캡슐화하지 않았으며, 다중 스레드로 병행적으로 여러 프로세스를 실행하지 않았습니다. 필요에 따라 향후 개선할 것입니다.
이것이 본문의 모든 내용입니다. 여러분의 학습에 도움이 되길 바랍니다. 또한, 다음은 노래教程을 많이 지지해 주시기를 바랍니다.
선언: 본문 내용은 인터넷에서 가져왔으며, 저작권자에게 속합니다. 내용은 인터넷 사용자가 자발적으로 기여하고 업로드한 것이며, 사이트는 소유권을 가지지 않으며, 인공적으로 편집된 것도 아니며, 관련 법적 책임도 부담하지 않습니다. 저작권 문제가 의심되는 내용을 발견하면, notice#w로 이메일을 보내 주세요.3codebox.com(보고서를 작성할 때, #을 @으로 변경하여 보고하십시오. 관련 증거를 제공하면, 사이트가 즉시 의심스러운 저작권 내용을 삭제합니다.