python-selenium gridを使用した分散テスト


一、環境の構築は博文を参考にしてくださいhttp://blog.csdn.net/qq_32782059/article/details/72875225
二、本コードの運行環境は以下のように構成されている.
1、selenium-server-standalone-3.4.0.jar
2、selenium-2.53.0
備考:selenium 3.*バージョンはselenium-serverと互換性がなく、Bugがあります.
3、火狐ブラウザの場合、geckodriver.exeにはselenium-3.3が必要です.1以上のバージョンなので、本明細書で説明する環境ではテストに合格できません.
4、IEで、以下のエラーが発生する:NoSuchElementException:Message:Unable to find element with id、IEの設定を修正する必要があり、以下の通り:
使用python-selenium grid进行分布式测试_第1张图片
5、IEでは、以下のようにすべての領域の保護モードの設定を確保する必要がある.
使用python-selenium grid进行分布式测试_第2张图片
すなわち、インターネット、Local Intranet、Trusted Sites、Restricted sitesの4つの領域はすべて同じに設定します.
備考:webdriverはhttp://docs.seleniumhq.org/download/ページのダウンロード
6、特定seleniumバージョンのインストール
a、pip uninstall seleniumアンインストールプログラム
b、pip install selenium=2.53インストール2.53バージョンselenium
7、pythonテストコードは以下の通りです.
#coding = utf-8

import time
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

#google   
capabilities = DesiredCapabilities.CHROME
#     
#capabilities = DesiredCapabilities.INTERNETEXPLORER
#     
#capabilities = DesiredCapabilities.FIREFOX
capabilities["platform"] = "ANY"

driver = webdriver.Remote(command_executor="http://localhost:4444/wd/hub",  desired_capabilities=capabilities )
"""
  grid hub       ,       ,            。
 driver = webdriver.Ie()       ,
"""

#driver = webdriver.Ie()

#driver.implicitly_wait(3)
driver.get("https://www.baidu.com")

driver.find_element_by_id("kw").send_keys("python")
driver.find_element_by_id("su").click()

time.sleep(5)
driver.quit()

8、同時に複数のノードでテスト例を実行する.
hub:java-jar selenium-server-standalone-3.4を起動します.0.jar -role hub
起動ノード1:java-jar selenium-server-standalone-3.4.0.jar -role node -port 5555 -browser browserName=chrome,maxInstances=5 -hub http://localhost:4444/grid/register
ノード1は、5つのGoogleブラウザインスタンスをサポートします.
起動ノード2:java-jar selenium-server-standalone-3.4.0.jar -role node -browser "browserName=internet explorer" -port 5556 -hub http://localhost:4444/grid/register
ノード2は、1つのマイクロソフトブラウザインスタンスをサポートします.
次はテストコードです.
#coding = utf-8

import time
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from threading import Thread

#       
browsers = [
    DesiredCapabilities.INTERNETEXPLORER,
    DesiredCapabilities.CHROME
]

#   webdriver  
def createDriver(caps):
    return webdriver.Remote(command_executor='http://127.0.0.1:4444/wd/hub',desired_capabilities=caps)

def start_test(driver):
    #driver.implicitly_wait(3)
    time.sleep(3)
    driver.get("http://www.baidu.com")
    driver.find_element_by_id("kw").send_keys("python")
    driver.find_element_by_id("su").click()
    #driver.implicitly_wait(3)
    time.sleep(3)
    driver.quit()

#       (        。)
def test_on_nodes():
    threads = []

    for bw in browsers:
        driver = createDriver(bw)
        t = Thread(target=start_test, args=(driver,))
        threads.append(t)

    for t in threads:
        t.start()

    for t in threads:
        t.join()

    print("      ")

if __name__ == '__main__':
    #print(DesiredCapabilities.INTERNETEXPLORER)
    test_on_nodes()