如何使用硒网格调试带有 VNC 的浏览器?
How can I debug one browser with VNC using selenium grid?
我想使用存储库中提供的示例创建一个 selenium 网格:
# To execute this docker-compose yml file use `docker-compose -f docker-compose-v3-full-grid.yml up`
# Add the `-d` flag at the end for detached execution
# To stop the execution, hit Ctrl+C, and then `docker-compose -f docker-compose-v3-full-grid.yml down`
version: "3"
services:
selenium-event-bus:
image: selenium/event-bus:4.1.1-20211217
container_name: selenium-event-bus
ports:
- "4442:4442"
- "4443:4443"
- "5557:5557"
selenium-sessions:
image: selenium/sessions:4.1.1-20211217
container_name: selenium-sessions
ports:
- "5556:5556"
depends_on:
- selenium-event-bus
environment:
- SE_EVENT_BUS_HOST=selenium-event-bus
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
selenium-session-queue:
image: selenium/session-queue:4.1.1-20211217
container_name: selenium-session-queue
ports:
- "5559:5559"
depends_on:
- selenium-event-bus
environment:
- SE_EVENT_BUS_HOST=selenium-event-bus
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
selenium-distributor:
image: selenium/distributor:4.1.1-20211217
container_name: selenium-distributor
ports:
- "5553:5553"
depends_on:
- selenium-event-bus
- selenium-sessions
- selenium-session-queue
environment:
- SE_EVENT_BUS_HOST=selenium-event-bus
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
- SE_SESSIONS_MAP_HOST=selenium-sessions
- SE_SESSIONS_MAP_PORT=5556
- SE_SESSION_QUEUE_HOST=selenium-session-queue
- SE_SESSION_QUEUE_PORT=5559
selenium-router:
image: selenium/router:4.1.1-20211217
container_name: selenium-router
ports:
- "4444:4444"
depends_on:
- selenium-distributor
- selenium-sessions
- selenium-session-queue
environment:
- SE_DISTRIBUTOR_HOST=selenium-distributor
- SE_DISTRIBUTOR_PORT=5553
- SE_SESSIONS_MAP_HOST=selenium-sessions
- SE_SESSIONS_MAP_PORT=5556
- SE_SESSION_QUEUE_HOST=selenium-session-queue
- SE_SESSION_QUEUE_PORT=5559
chrome:
image: selenium/node-chrome:4.1.1-20211217
shm_size: 2gb
depends_on:
- selenium-event-bus
environment:
- SE_EVENT_BUS_HOST=selenium-event-bus
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
edge:
image: selenium/node-edge:4.1.1-20211217
shm_size: 2gb
depends_on:
- selenium-event-bus
environment:
- SE_EVENT_BUS_HOST=selenium-event-bus
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
firefox:
image: selenium/node-firefox:4.1.1-20211217
shm_size: 2gb
depends_on:
- selenium-event-bus
environment:
- SE_EVENT_BUS_HOST=selenium-event-bus
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
这将打开带有 http://127.0.0.1:4444/ui/index.html#/
上不同节点视图的 selenium 网格:
现在我想使用一段代码执行测试我不确定我在哪里复制它,但不是我的:
import os
import datetime
import time
import unittest
from selenium import webdriver
class Example(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Remote(
command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities={
'browserName': 'firefox',
'javascriptEnabled': True
}
)
self.driver.get('https://google.es/')
def test_something(self):
dt_format = '%Y%m%d_%H%M%S'
cdt = datetime.datetime.fromtimestamp(time.time()).strftime(dt_format)
current_location = os.getcwd()
img_folder = current_location + '/images/'
if not os.path.exists(img_folder):
os.mkdir(img_folder)
picture = img_folder + cdt + '.png'
self.driver.save_screenshot(picture)
print('Waiting 160sec...')
time.sleep(160)
print('Done waiting...')
def tearDown(self):
self.driver.quit()
if __name__ == "__main__":
unittest.main(verbosity=1)
代码按预期工作,因为 google 页面的屏幕截图已保存。但是我想在这个等待时间检查浏览器,所以我添加到 chrome 端口:
ports:
- 5900:5900
而且我可以使用节点的 OS 打开与 VNC 查看器的 VNC 连接,但我无法看到 运行 我测试的浏览器。
selenium grid到各个节点的url也不行
如何访问我测试的特定浏览器?
测试说
desired_capabilities={
'browserName': 'firefox',
'javascriptEnabled': True
}
虽然你提到你“添加到 chrome 端口”,所以我怀疑你看错了节点。
我建议您打开所有节点的所有 VNC 端口,如所述here。
我也推荐noVNC。
我想使用存储库中提供的示例创建一个 selenium 网格:
# To execute this docker-compose yml file use `docker-compose -f docker-compose-v3-full-grid.yml up`
# Add the `-d` flag at the end for detached execution
# To stop the execution, hit Ctrl+C, and then `docker-compose -f docker-compose-v3-full-grid.yml down`
version: "3"
services:
selenium-event-bus:
image: selenium/event-bus:4.1.1-20211217
container_name: selenium-event-bus
ports:
- "4442:4442"
- "4443:4443"
- "5557:5557"
selenium-sessions:
image: selenium/sessions:4.1.1-20211217
container_name: selenium-sessions
ports:
- "5556:5556"
depends_on:
- selenium-event-bus
environment:
- SE_EVENT_BUS_HOST=selenium-event-bus
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
selenium-session-queue:
image: selenium/session-queue:4.1.1-20211217
container_name: selenium-session-queue
ports:
- "5559:5559"
depends_on:
- selenium-event-bus
environment:
- SE_EVENT_BUS_HOST=selenium-event-bus
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
selenium-distributor:
image: selenium/distributor:4.1.1-20211217
container_name: selenium-distributor
ports:
- "5553:5553"
depends_on:
- selenium-event-bus
- selenium-sessions
- selenium-session-queue
environment:
- SE_EVENT_BUS_HOST=selenium-event-bus
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
- SE_SESSIONS_MAP_HOST=selenium-sessions
- SE_SESSIONS_MAP_PORT=5556
- SE_SESSION_QUEUE_HOST=selenium-session-queue
- SE_SESSION_QUEUE_PORT=5559
selenium-router:
image: selenium/router:4.1.1-20211217
container_name: selenium-router
ports:
- "4444:4444"
depends_on:
- selenium-distributor
- selenium-sessions
- selenium-session-queue
environment:
- SE_DISTRIBUTOR_HOST=selenium-distributor
- SE_DISTRIBUTOR_PORT=5553
- SE_SESSIONS_MAP_HOST=selenium-sessions
- SE_SESSIONS_MAP_PORT=5556
- SE_SESSION_QUEUE_HOST=selenium-session-queue
- SE_SESSION_QUEUE_PORT=5559
chrome:
image: selenium/node-chrome:4.1.1-20211217
shm_size: 2gb
depends_on:
- selenium-event-bus
environment:
- SE_EVENT_BUS_HOST=selenium-event-bus
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
edge:
image: selenium/node-edge:4.1.1-20211217
shm_size: 2gb
depends_on:
- selenium-event-bus
environment:
- SE_EVENT_BUS_HOST=selenium-event-bus
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
firefox:
image: selenium/node-firefox:4.1.1-20211217
shm_size: 2gb
depends_on:
- selenium-event-bus
environment:
- SE_EVENT_BUS_HOST=selenium-event-bus
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
这将打开带有 http://127.0.0.1:4444/ui/index.html#/
上不同节点视图的 selenium 网格:
现在我想使用一段代码执行测试我不确定我在哪里复制它,但不是我的:
import os
import datetime
import time
import unittest
from selenium import webdriver
class Example(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Remote(
command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities={
'browserName': 'firefox',
'javascriptEnabled': True
}
)
self.driver.get('https://google.es/')
def test_something(self):
dt_format = '%Y%m%d_%H%M%S'
cdt = datetime.datetime.fromtimestamp(time.time()).strftime(dt_format)
current_location = os.getcwd()
img_folder = current_location + '/images/'
if not os.path.exists(img_folder):
os.mkdir(img_folder)
picture = img_folder + cdt + '.png'
self.driver.save_screenshot(picture)
print('Waiting 160sec...')
time.sleep(160)
print('Done waiting...')
def tearDown(self):
self.driver.quit()
if __name__ == "__main__":
unittest.main(verbosity=1)
代码按预期工作,因为 google 页面的屏幕截图已保存。但是我想在这个等待时间检查浏览器,所以我添加到 chrome 端口:
ports:
- 5900:5900
而且我可以使用节点的 OS 打开与 VNC 查看器的 VNC 连接,但我无法看到 运行 我测试的浏览器。
selenium grid到各个节点的url也不行
如何访问我测试的特定浏览器?
测试说
desired_capabilities={
'browserName': 'firefox',
'javascriptEnabled': True
}
虽然你提到你“添加到 chrome 端口”,所以我怀疑你看错了节点。
我建议您打开所有节点的所有 VNC 端口,如所述here。
我也推荐noVNC。