python selenium-9 grid模式

grid是进行分布式测试的工具,由一个hub主节点和若干个node代理节点组成

1.下载Selenium Standalone Server

下载地址:https://www.seleniumhq.org/download/

2.启动hub和节点

#hub默认端口是4444,node默认端口是5555
java -jar selenium-server-standalone-3.141.59.jar -role hub
#本机注册节点
java -jar selenium-server-standalone-3.141.59.jar -role node
#本机指定端口注册节点
java -jar selenium-server-standalone-3.141.59.jar -role node -port 5556
#远程机器注册节点
java -jar selenium-server-standalone-3.141.59.jar -role node -port 5557 -hub http://192.168.63.143:4444/grid/register
节点注册地址: http://192.168.63.143:4444/grid/register/ hub管理地址: http://192.168.63.143:4444/grid/console

3.查看后台http://192.168.63.143:4444/grid/console

4.实例1:编写自动化测试脚本

from selenium.webdriver import Remote
driver = Remote(command_executor="http://127.0.0.1:4444/wd/hub",
                desired_capabilities={'platform':'ANY',
                                      'browserName':'chrome',
                                      'version':'',
                                      'javascriptEnabled':True})
driver.get("http://www.baidu.com")
driver.find_element_by_xpath("//input[@id='kw' and @class='s_ipt']").send_keys("hello")
driver.find_element_by_xpath("//input[@value='百度一下' and @id='su']").click()
driver.quit()

修改脚本以在不同的浏览器上运行

from selenium.webdriver import Remote
from time import sleep
lists={'http://192.168.63.143:4444/wd/hub':'chrome',
       'http://192.168.63.143:5555/wd/hub':'firefox'}
for host,browser in lists.items():
    print(host,browser)
    driver = Remote(command_executor=host,
                    desired_capabilities={'browserName': browser,
                                          'platform': 'ANY',
                                          'version':'',
                                          'javascriptEnabled':True
                                          }
                    )
    driver.get("http://www.baidu.com")
    driver.find_element_by_xpath("//input[@id='kw' and @class='s_ipt']").send_keys(browser)
    driver.find_element_by_xpath("//input[@value='百度一下' and @id='su']").click()
    sleep(3)
    result_text = driver.find_element_by_xpath("//span[@class='nums_text']").text
    assert "百度为您找到相关结果约" in result_text
    driver.quit()

5.浏览器内核

浏览器最重要或者最核心的部分是Rendering Engine,即渲染引擎,习惯成为渲染引擎。所谓的浏览器内核,决定了浏览器如何显示网页的内容以及页面的格式信息。
内核 介绍
TridentIE内核 基于Mosaic代码基础上修改而来,从IE4开始开始一直沿用到IE11,是一款开放的内核,其接口内核设计成熟,国内早期浏览器都是基于该内核。如遨游,世界之窗,360安全浏览器
Gecko火狐内核 代码完全公开,可开发程度很高
Presto 欧朋内核 在欧朋7开始使用,自欧朋12.17已被废弃,开始采用谷歌的Blink内核。
Webkit Safari内核 是苹果公司自己的内核。谷歌也曾采用webkit打造Chrome浏览器。国内的浏览器也采用了这一内核,如遨游3,搜狗告诉浏览器、360极速浏览器。
Blink 谷歌和欧朋开发的浏览器排版引擎,该引擎是Webkit中WebCore组件的一个分支,并且在Chrome(28以后)、欧朋(15以后)和Yandex浏览器中使用

6.HtmlUnit模式和PhantomJS模式

以上2中没有界面,只在后台运行,其运行速度非常迅速,如果需要,可以截图。以下2种均需要先执行 java -jar selenium-server-standalone-3.13.0.jar 

PhantomJS模式

from time import sleep
import sys
path=sys.path[0]
ph_path="/".join(path.split('/')[:-1])+"/driver/phantomjs-2.1.1-macosx/bin/phantomjs"
driver = webdriver.PhantomJS(executable_path=ph_path)
driver.set_window_size(1366,768)
driver.get("http://www.baidu.com")
driver.implicitly_wait(10)
driver.find_element_by_xpath("//input[@id='kw']").send_keys("hello")
driver.get_screenshot_as_file("15.png")
driver.find_element_by_xpath("//input[@id='su']").click()
sleep(2)
driver.get_screenshot_as_file("test.png")
result_text = driver.find_element_by_xpath("//span[@class='nums_text']").text
assert "百度为您找到相关结果约" in result_text
driver.quit()

HtmlUnit模式

from selenium.webdriver import Remote
from time import sleep
dc = {'browserName':'htmlunit'}
driver = Remote(command_executor="http://192.168.63.143:4444/wd/hub",desired_capabilities=dc)
driver.set_window_size(1366,768)
driver.get("http://www.baidu.com")
driver.implicitly_wait(10)
driver.find_element_by_xpath("//input[@id='kw']").send_keys("hello")
driver.find_element_by_xpath("//input[@id='su']").click()
sleep(2)
result_text = driver.find_element_by_xpath("//span[@class='nums_text']").text
assert "百度为您找到相关结果约" in result_text
driver.quit()

FAQ

1.使用PhantomJS模式,xpath定位不到元素

原因:窗口太小,导致页面展示不全。指定窗口大小即可解决
driver.set_window_size(1366,768)

2.htmlunit创建session失败

selenium-server-standalone jar包历史版本地址
使用3.14.159失败,降级到3.13成功,但是driver.get_screenshot_as_file("test.png")截图依然失败

posted on 2018-11-18 18:42  singleSpace  阅读(890)  评论(0编辑  收藏  举报