学习笔记之selenium_grid2

想要运行selenium server,必须要有Java环境,需要配置和安装JDK和JRE
安装好后,下载selenium server的jar包https://selenium.dev/downloads/
然后使用java环境打开jar包:
在这里插入图片描述
这样就启动好了selenium的server
启动起来后,试着运行一个RC脚本,以下代码只能在python2中运行,python3中不能运行,python3中貌似已经没有selenium的包了,也不支持RC了:

from selenium import selenium
sel = selenium("127.0.0.1",4444,"*firefox","https://www.baidu.com")
sel.start()
sel.open("/")
sel.type("id = kw","selenium grid")
sel.click("id=su")
sel.wait_for_page_load("30000")
sel.stop()

grid与webdriver的区别就是,webdriver需要各种浏览器的驱动,grid是需要server的支持。
grid是用来执行分布式的,需要多个节点
grid:
hub 主节点,有且只有一个
node 分支节点,可以有无数个
所以selenium server启动时,需要指定一个主节点,以上代码运行后,默认的节点是127.0.0.1,端口号是4444
手动指定的话,后面加role(角色):

java -jar selenium-server-standalone-3.141.59.jar -role hub

如图:

这样指定之后,hub主节点指向的是4444端口号的主分支
然后可以使用node去指定分支

java -jar selenium-server-standalone-3.141.59.jar -role node -port 5555

如图:
在这里插入图片描述
分支必须一个参数(指定端口号时,必须重新换个新的端口号,因为默认的4444已被主节点使用了)

--------------------------------------------------------------------------------------------------------------------------------------------
webdriver的原理:
在这里插入图片描述
其实原理跟selenium RC也是用本地端口号是4444来运行的,只是webdriver是写死的,想用其他地址的话, 直接在以上这个类中去更改主节点使用remote方法
以实际webdriver脚本来解释:

from selenium import webdriver
import time
browsers = ['firefox','chrome','internet explorer']
for b in browsers:
    dr = webdriver.Remote(command_executor='http://192.168.31.111:5555/wd/hub',
                      desired_capabilities= {
                                                    "browserName": "b",
                                                    "marionette": True,
                                                    "acceptInsecureCerts": True,
                                             })
    dr.get("https://www.baidu.com")
    dr.find_element_by_id("kw").send_keys(b)
    dr.find_element_by_id("su").click()
    time.sleep(2)
    dr.close()

系统会将运行的log会打印在端口号为5555的DOS界面内,而且相应的对打开各个浏览器执行操作。

--------------------------------------------------以上跑的都是本地节点---------------------------------------------------------------

跑远程节点

我们将远程节点都定义在分支节点内
可以先在虚拟机中运行,而且要连上网络
条件:

  1. 本地主机和远程主机是能ping通IP地址,比如远程主机IP为192.168.31.224,在本机的DOS界面>>>ping 192.168.31.224,看是否能接受到远程主机的回复信息,这只是单向的,也要在远程主机上ping一下本地主机的IP地址,看是否能接受到本地主机的回复信息。能ping通表示能相互访问
  2. 远程主机也需要运行selenium server的子节点。所以远程主机也需要java环境,也需要selenium server的jar包
  3. 需要有相应脚本内要求的浏览器和驱动
    启动本机hub主机
java -jar selenium-server-standalone-3.141.59.jar -role hub

启动远程node主机,设置端口号为5555

java -jar selenium-server-standalone-3.141.59.jar -role node -port 5555 -hub http://本地主机的IP地址:主节点端口号/grid/register

(设置的端口号为5555,指向hub 主机-IP为192...

然后在本地主机运行脚本,脚本内的地址需要指定远程主机IP地址和端口号
通过浏览器访问grid的控制台:http://http://127.0.0.1:4444/grid/console,如图:
在这里插入图片描述

Edge浏览器

目前selenium2已经支持Edge浏览器,不过,Edge浏览器只能运行于Windows10,也是需要下载驱动。在脚本中命名:

from selenium.webdriver import Remote
import time
dc = {'browserName':'MicrosoftEdge'}
driver =Remote(command_executor='http://192.168.31.111:5555/wd/hub',
                      desired_capabilities= {
                                                    "browserName": "b",
                                                    "marionette": True,
                                                    "acceptInsecureCerts": True,
                                             })
    driver.get("https://www.baidu.com")
    driver.find_element_by_id("kw").send_keys("MicrosoftEdge")
    driver.find_element_by_id("su").click()
    time.sleep(2)
    driver.close()

safari浏览器

需要用safari浏览器去跑脚本的话,这个浏览器没有驱动,这个浏览器已经继承到selenium server中了。执行代码如下:
先启动selenium server

from selenium.webdriver import Remote
import time
dc = {'browserName':'safari'}
driver =Remote(command_executor='http://192.168.31.111:5555/wd/hub',
                      desired_capabilities= dc)
    driver.get("https://www.baidu.com")
    driver.find_element_by_id("kw").send_keys("safari")
    driver.find_element_by_id("su").click()
    time.sleep(2)
    driver.close()

HtmlUnit模式

HtmlUnit官方网站:http://http://htmlunit.sourceforge.net
HtmlUnit是一款开源的Java页面分析工具,读取页面后,可以有效的使用HtmlUnit分析页面上的内容。项目可以模拟浏览器运行,被誉为java浏览器的开源实现,这个没有界面的浏览器,运行速度也是非常的迅速,selenium server中同样包含了HtmlUnit驱动
这样的好处就是能节省运行时间

phatomJS

这种方式是运行脚本最快迅速的方式,这个也是需要下载驱动的。就是人们俗称的爬虫,它跟HtmlUnit一样是不会真正打开一个浏览器。推荐

selenium grid只能分布式,不能并行,只有结合python的多线程,就会实现分布式,并且并行
分布式:在不同的平台上执行
并行:同时在不同的平台上同时执行

java中的TestNG很强大,可以学学,能甩unittest好几条街

发布了24 篇原创文章 · 获赞 0 · 访问量 551

猜你喜欢

转载自blog.csdn.net/MoLi_D/article/details/104316103