selenium常用API笔记。

一、selenium分布式

1、下载运行 selenium server

(1)下载地址:https://code.google.com/p/selenium/ ,在页面中找到 selenium-server-standalone-XXX.jar 进行下载。

(2)下载完成可以放到任意路径,在命令提示符下启动 Selenium Server:> java -jar selenium-server-standalone-XXX.jar

2、Selenium Grid

Selenium Grid 是用于设计帮助我们进行分布式测试的工具,其整个结构是由一个 hub 节点和若干个代理节点组成。hub 用来管理各个代理节点的注册和状态信息,并且接受远程客户端代码的请求调用,然后把请求的命令再转发给代理节点来执行。

(1)启动一个 hub 和一个 node,hub 默认端口号为 4444,node 默认端口号为 5555

  • > java -jar selenium-server-standalone-x.xx.x.jar -role hub
  • > java -jar selenium-server-standalone-x.xx.x.jar -role node

(2)若是同一台机器要启动多个 node 则要注意端口分配问题,可以这样来启动多个 node:

  • > java -jar selenium-server-standalone-x.xx.x.jar -role node -port 5555
  • > java -jar selenium-server-standalone-x.xx.x.jar -role node -port 5556
  • > java -jar selenium-server-standalone-x.xx.x.jar -role node -port 5557

(3)通过浏览器访问 gird 的控制台:http://127.0.0.1:4444/grid/console

3、Remote 驱动

(1)WebDriver 提供了 Remote 可以发送指令到远程服务器控制浏览器,先看下 Remote 的格式:

1
2
3
4
5
6
from selenium.webdriver import Remote
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

driver = Remote(command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities=DesiredCapabilities.CHROME
)
  • command_executor 为命令执行器器,它用于指定脚本执行的主机及端口。
  • desired_capabilities 都包含了{‘platform’: ‘ANY’, ‘browserName’: ‘chrome’, ‘version’: ‘’, ‘javascriptEnabled’:True}

(2)根据 Desired Capabilities 所包含的信息,在创建驱动(driver)时,可以这样来描述运行的环境:

1
2
3
4
5
6
7
8
9
10
11
12
from selenium.webdriver import Remote
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

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.quit()

4、分布式小示例

(1)本地主机启动一个 hub ,默认端口 4444 ,ip 地址为 172.16.10.66:

  • >java -jar selenium-server-standalone-2.39.0.jar -role hub

(2)本地主机启动一个本地 node 节点:

  • >java -jar selenium-server-standalone-2.39.0.jar -role node -port 5555

(3)远程主机启动一个远程 node 节点,设置的端口号为:5555 ,指向本地 hub ip 为 172.16.10.66:

  • $ java -jar selenium-server-standalone-2.39.0ar -role node -port 5555 -hub http://172.16.10.66:4444/grid/register
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#coding=utf-8
from selenium.webdriver import Remote
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

# 定义主机与浏览器
lists={'http://127.0.0.1:4444/wd/hub':'chrome',
'http://127.0.0.1:5555/wd/hub':'internet explorer',
'http://172.16.10.66:5555/wd/hub':'firefox'
}

# 通过不同的浏览器执行脚本
for host,browser in lists.items():
driver = Remote(command_executor=host,
desired_capabilities={'platform': 'ANY',
'browserName':'chrome',
'version': '',
'javascriptEnabled': True
}
)
driver.get("http://www.baidu.com")
driver.quit()

二、selenium多进程

1、分布式和多进程应用区别

(1)分布式:分布式只负责将一个测试脚本可调用不同的远程环境来执行

(2)并行:行强调“同时”的概念,它可以借助多线程或多进程技术并行的来执行测试脚本,从而缩短测试脚本的运行时间。

2、多进程小示例

(1)本地主机启动一个 hub ,默认端口 4444 ,ip 地址为 172.16.10.66 :

  • >java -jar selenium-server-standalone-2.39.0.jar -role hub

(2)本地主机启动一个本地 node 节点:

  • >java -jar selenium-server-standalone-2.39.0.jar -role node -port 5555

(3)远程主机启动一个远程 node 节点,设置的端口号为 5555 ,ip 为 172.16.10.34 :

  • $ java -jar selenium-server-standalone-2.39.0ar -role node -port 5555 -hub http://172.16.10.66:4444/grid/register
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#coding=utf-8
from threading import Thread
from selenium import webdriver

# 启动参数(指定运行主机与浏览器)
list = {'http://127.0.0.1:4444/wd/hub':'chrome',
'http://127.0.0.1:5555/wd/hub':'internet explorer',
'http://172.16.10.34:5555/wd/hub': 'firefox'
}

# 测试用例
def test_baidu(host,browser):
driver = webdriver.Remote(command_executor=host,
desired_capabilities={'platform': 'ANY',
'browserName':browser,
'version': '',
'javascriptEnabled': True
}
)
driver.get('http://www.baidu.com')
driver.find_element_by_id("kw").send_keys(browser)
driver.find_element_by_id("su").click()
driver.quit()

threads = []
files = range(len(list))

# 创建线程
for host,browser in list.items():
t = threading.Thread(target=test_baidu,args=(host,browser))
threads.append(t)

if __name__ == '__main__':
# 启动线程
for i in files:
threads[i].start()
for i in files:
threads[i].join()

持续更新…

最后更新: 2018年11月03日 16:38

原始链接: http://pythonfood.github.io/2018/03/01/selenium多浏览器运行/

× 多少都行~
打赏二维码