• Selenium Grid自动化分布式执行


    Selenium Grid 简介

    Selenium Grid 是 Selenium 的三大组件之一,允许用户同时在不同的机器和系统上测试不同浏览器。
    也就是说 Selenium Grid 支持分布式的测试执行。它可以让你的测试用例在一个分布式的执行环境中运行。

    由上图可见,测试脚本会通过 selenium hub 节点分发给不同的 node 节点,而不同的 node 节点所在的操作系统和搭载的浏览器类型可以是不同的,

     hub 节点:

    • 中心节点,或总控节点
    • 管理各个 node 节点的注册信息和状态信息
    • 接收并转发客户端(测试脚本)请求到合适的 node 节点

    node 节点:

    • 子节点,或代理节点
    • 负责注册配置信息到 hub 节点(平台、浏览器、浏览器版本等)
    • 负责接收来自 hub 节点的转发的请求以执行测试脚本
    • 也可单独作为远程节点执行测试脚本

    selenium grid 应用

    环境说明:

    • 本地端系统为 win10,搭载 V100 版本的 Chrome 浏览器,
    • 远程端系统为 win7,搭载 V8 版本的 IE 浏览器,
    • 两台主机能够相互 ping 通
    • hub 节点和 node1 节点都是在本地端工作,node2 节点在远程端工作

    环境准备步骤:

    1. 测试机器安装 JDK,配置环境变量
    2. 下载 selenium-server-standalone-x.x.x.jar

    http://selenium-release.storage.googleapis.com/index.html?path=4.0/

        3.下载浏览器驱动

        注:IE 驱动和 selenium 依赖在一起

     

    配置运行

    1、本地端启动 hub

    java -jar selenium-server-standalone-4.0.0-alpha-2.jar -role hub -port 8888 -maxSession 10

     

    参数解释:

    • Java -jar selenium-server-standalone-4.0.0-alpha-2.jar 运行 jar 包
    • -role hub 以 hub 的角色运行
    • -port 8888 指定 hub 运行的端口(默认为 4444)
    • -maxSession 10 最大的处理会话

    2、查看 hub 的运行状态

    浏览器中输入 http://localhost:8888/grid/console 进入到到 hub 的 console 控制台

    3、启动 node1

    node1 节点工作在本地端,配置的浏览器为 V100 的 Chrome

    java -Dwebdriver.chrome.driver="chromedriver.exe" -jar selenium-server-standalone-4.0.0-alpha-2.jar -role node -hub "http://192.168.1.150:8888/grid/register/" -port 5558 -browser "browserName=chrome,maxInstances=2,version=100,platform=WINDOWS"

    参数解释:

    • -Dwebdriver.chrome.driver="chromedriver.exe" 指定 chromeDriver 驱动所在的路径(本地)
    • -jar selenium-server-standalone-3.141.59.jar 运行 jar 包
    • -role node 以 node 角色执行
    • -hub "http://192.168.1.222:8888/grid/register" 指定要链接的 hub 地址,这样 node 才能和 hub 通讯连接上
    • -port 5558 node 的执行端口
    • -browser "browserName=chrome,maxInstances=2,version=68,platform=WINDOWS"
    • browserName=chrome 运行的浏览器名称
    • maxInstances=2 最多支持两个浏览器实例
    • version=68 浏览器版本号
    • platform=WINDOWS 平台名称

    运行之后的效果:

     

    浏览器再次刷新访问 hub 的 console 端:

    4、启动远程端的 node2 节点

    node2 节点工作在远程端,配置的浏览器为 V56 的 Chrome

    启动配置为

    java  -Dwebdriver.firefox.driver="geckodriver.exe" -jar selenium-server-standalone-3.141.59.jar -role node -hub "http://192.168.140.1:8888/grid/register" -port 5558  -browser "browserName=firefox,maxInstances=2,version=56,platform=WINDOWS"

    浏览器再次刷新访问 hub 的 console 端,可以看到两个 node 节点已经成功注册到 hub 节点上

    我用的IE

    java  -Dwebdriver.ie.driver="IEDriverServer.exe" -jar selenium-server-standalone-4.0.0-alpha-2.jar -role node -hub "http://192.168.1.150:8888/grid/register/" -port 5558  -browser "browserName=ie,maxInstances=2,version=8,platform=WINDOWS"

     

    配置多个浏览器:

    java -Dwebdriver.ie.driver="IEDriverServer.exe" -Dwebdriver.chrome.driver="chromedriver.exe" -jar selenium-server-standalone-4.0.0-alpha-2.jar -role node -hub "http://192.168.1.150:8888/grid/register" -port 5555  -browser "browserName=internet explorer,maxInstances=2,version=8,platform=WINDOWS" -browser "browserName=chrome,maxInstances=3,version=100,platform=WINDOWS"

     

     

    poython 代码

     1 import time
     2 
     3 from selenium import webdriver
     4 
     5 from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
     6 
     7 driver = webdriver.Remote(
     8 
     9   command_executor='http://localhost:8888/wd/hub',
    10 
    11   desired_capabilities=DesiredCapabilities.CHROME)
    12 
    13 # driver = webdriver.Chrome()
    14 
    15 driver.get('http://www.baidu.com')
    16 
    17 print(driver.title)
    18 time.sleep(3)
    19 
    20 driver.quit()

     

    问题1:webdriverException

    command_executor的url地址,验证了必须是本地(localhost或者127.0.0.1)才可以,否则会报webdriverException


    driver = webdriver.Remote(

    command_executor='http://:port/wd/hub',

    desired_capabilities=DesiredCapabilities.CHROME)



    测试登录代码:
     1 import time
     2 
     3 from selenium import webdriver
     4 from selenium.webdriver.common.by import By
     5 
     6 from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
     7 
     8 driver = webdriver.Remote(
     9   command_executor='http://localhost:4444/wd/hub',
    10   # desired_capabilities=DesiredCapabilities.CHROME)
    11   desired_capabilities={'platform': 'ANY',
    12                         'browserName': 'chrome',
    13                         'version': '',
    14                         'javascriptEnabled': True
    15                         })
    16 
    17 # driver = webdriver.Chrome()
    18 
    19 driver.get('http://ip:1110/')
    20 
    21 print(driver.title)
    22 time.sleep(3)
    23 driver.find_element(By.XPATH, '//input[@placeholder="账号"]').send_keys("admin")
    24 driver.find_element(By.XPATH, '//input[@placeholder="密码"]').send_keys("1")# .click()
    25 driver.find_element(By.XPATH, '//span[text()="登录"]').click()
    26 
    27 
    28 time.sleep(3)
    29 print(driver.title)
    30 time.sleep(5)
    31 driver.quit()




    爬虫存在安全验证




     

  • 相关阅读:
    vue router replace
    html transition 标签
    transformorigin
    动态设置class名称
    oracle中trim,ltrim,rtrim函数用法
    blob字段存储文件并读取
    分区表的本地索引竟然失效了——ORA01502
    powerdesigner使用细节
    PLS00231错误:function name may not be used in SQL
    sqlplus命令说明
  • 原文地址:https://www.cnblogs.com/yaner2018/p/16166023.html
Copyright © 2020-2023  润新知