Selenium Hub,启动 2 个浏览器仅在其中 1 个中运行测试(selenium python)
Selenium Hub, Launches 2 browser only runs test in 1 of them (selenium python)
TL/DR:现在它启动了 2 个浏览器,但只有 运行 是 1 中的测试。我错过了什么?
所以我试图让 selenium hub 在 mac (OS X 10.11.5) 上运行。我使用 this 安装,然后在终端选项卡中启动集线器:
selenium-standalone start -- -role hub
然后在同一个 machine 的终端的另一个选项卡中注册一个节点。
selenium-standalone start -- -role node -hub http://localhost:4444/grid/register -port 5556
它出现在 console 中,有 5 个可用的 firefox 和 chrome 浏览器。
这是我的代码。在名为 globes.py 的文件中,我有这个。
class globes:
def __init__(self, number):
self.number = number
base_url = "https://fake-example.com"
desired_cap = []
desired_cap.append ({'browserName':'chrome', 'javascriptEnabled':'true', 'version':'', 'platform':'ANY'})
desired_cap.append ({'browserName':'firefox', 'javascriptEnabled':'true', 'version':'', 'platform':'ANY'})
selenium_server_url = 'http://127.0.0.1:4444/wd/hub'
现在我正尝试 运行 看起来像这样的单个测试。
import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from globes import *
class HeroCarousel(unittest.TestCase):
def setUp(self):
for driver_instance in globes.desired_cap:
self.driver = webdriver.Remote(
command_executor=globes.selenium_server_url,
desired_capabilities=driver_instance)
self.verificationErrors = []
def test_hero_carousel(self):
driver = self.driver
driver.get(globes.base_url)
hero_carousel = driver.find_element(By.CSS_SELECTOR, 'div.carousel-featured')
try: self.assertTrue(hero_carousel.is_displayed())
except AssertionError, e: self.verificationErrors.append("home_test: Hero Carousel was not visible")
def tearDown(self):
self.driver.close()
self.assertEqual([], self.verificationErrors)
if __name__ == "__main__":
unittest.main()
现在它同时启动 Firefox 和 Chrome,但仅 运行s 在 Firefox 中进行测试。 Chrome 打开后只停留在空白页上,无法关闭。所以我认为我编写测试的方式有问题。那我错过了什么?如果这很明显,我深表歉意,但我只是在学习如何设置集线器,并且刚刚学会了 python 几周前编写 selenium 测试。
我认为 Hubs 在同时启动时工作,但我确实尝试在不同端口的同一 machine 上添加第二个节点并得到相同的结果。以防万一这是集线器打印出来的内容。
INFO - Got a request to create a new session: Capabilities [{browserName=chrome, javascriptEnabled=true, version=, platform=ANY}]
INFO - Available nodes: [http://192.168.2.1:5557]
INFO - Trying to create a new session on node http://192.168.2.1:5557
INFO - Trying to create a new session on test slot {seleniumProtocol=WebDriver, browserName=chrome, maxInstances=5, platform=MAC}
INFO - Got a request to create a new session: Capabilities [{browserName=firefox, javascriptEnabled=true, version=, platform=ANY}]
INFO - Available nodes: [http://192.168.2.1:5557]
INFO - Trying to create a new session on node http://192.168.2.1:5557
INFO - Trying to create a new session on test slot {seleniumProtocol=WebDriver, browserName=firefox, maxInstances=5, platform=MAC}
您需要使用self.driver.quit()
,否则浏览器不会退出,只会关闭当前window。
您很快就会遇到多个浏览器 运行,您将不得不为它们付费。
请原谅我,因为我还没有真正使用过 selenium,所以我离题太远了,这个答案完全基于与只保留对 setUp
[=16 中最后创建的驱动程序的引用相关的问题=]
而不是保留一个 self.driver
你需要有一个所有驱动程序的列表,比方说 self.drivers
,然后在处理它们而不是 driver = self.driver
你会做 for driver in self.drivers:
并将所有相关代码缩进到 for 循环中,如下所示:
class HeroCarousel(unittest.TestCase):
def setUp(self):
self.drivers = [] #could make this with list comprehension
for driver_instance in globes.desired_cap:
driver = webdriver.Remote(
command_executor=globes.selenium_server_url,
desired_capabilities=driver_instance)
self.drivers.append(driver)
self.verificationErrors = []
def test_hero_carousel(self):
for driver in self.drivers:
driver.get(globes.base_url)
hero_carousel = driver.find_element(By.CSS_SELECTOR, 'div.carousel-featured')
try: self.assertTrue(hero_carousel.is_displayed())
except AssertionError, e: self.verificationErrors.append("home_test: Hero Carousel was not visible")
def tearDown(self):
for driver in self.drivers:
driver.close()
self.assertEqual([], self.verificationErrors)
TL/DR:现在它启动了 2 个浏览器,但只有 运行 是 1 中的测试。我错过了什么?
所以我试图让 selenium hub 在 mac (OS X 10.11.5) 上运行。我使用 this 安装,然后在终端选项卡中启动集线器:
selenium-standalone start -- -role hub
然后在同一个 machine 的终端的另一个选项卡中注册一个节点。
selenium-standalone start -- -role node -hub http://localhost:4444/grid/register -port 5556
它出现在 console 中,有 5 个可用的 firefox 和 chrome 浏览器。
这是我的代码。在名为 globes.py 的文件中,我有这个。
class globes:
def __init__(self, number):
self.number = number
base_url = "https://fake-example.com"
desired_cap = []
desired_cap.append ({'browserName':'chrome', 'javascriptEnabled':'true', 'version':'', 'platform':'ANY'})
desired_cap.append ({'browserName':'firefox', 'javascriptEnabled':'true', 'version':'', 'platform':'ANY'})
selenium_server_url = 'http://127.0.0.1:4444/wd/hub'
现在我正尝试 运行 看起来像这样的单个测试。
import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from globes import *
class HeroCarousel(unittest.TestCase):
def setUp(self):
for driver_instance in globes.desired_cap:
self.driver = webdriver.Remote(
command_executor=globes.selenium_server_url,
desired_capabilities=driver_instance)
self.verificationErrors = []
def test_hero_carousel(self):
driver = self.driver
driver.get(globes.base_url)
hero_carousel = driver.find_element(By.CSS_SELECTOR, 'div.carousel-featured')
try: self.assertTrue(hero_carousel.is_displayed())
except AssertionError, e: self.verificationErrors.append("home_test: Hero Carousel was not visible")
def tearDown(self):
self.driver.close()
self.assertEqual([], self.verificationErrors)
if __name__ == "__main__":
unittest.main()
现在它同时启动 Firefox 和 Chrome,但仅 运行s 在 Firefox 中进行测试。 Chrome 打开后只停留在空白页上,无法关闭。所以我认为我编写测试的方式有问题。那我错过了什么?如果这很明显,我深表歉意,但我只是在学习如何设置集线器,并且刚刚学会了 python 几周前编写 selenium 测试。
我认为 Hubs 在同时启动时工作,但我确实尝试在不同端口的同一 machine 上添加第二个节点并得到相同的结果。以防万一这是集线器打印出来的内容。
INFO - Got a request to create a new session: Capabilities [{browserName=chrome, javascriptEnabled=true, version=, platform=ANY}]
INFO - Available nodes: [http://192.168.2.1:5557]
INFO - Trying to create a new session on node http://192.168.2.1:5557
INFO - Trying to create a new session on test slot {seleniumProtocol=WebDriver, browserName=chrome, maxInstances=5, platform=MAC}
INFO - Got a request to create a new session: Capabilities [{browserName=firefox, javascriptEnabled=true, version=, platform=ANY}]
INFO - Available nodes: [http://192.168.2.1:5557]
INFO - Trying to create a new session on node http://192.168.2.1:5557
INFO - Trying to create a new session on test slot {seleniumProtocol=WebDriver, browserName=firefox, maxInstances=5, platform=MAC}
您需要使用self.driver.quit()
,否则浏览器不会退出,只会关闭当前window。
您很快就会遇到多个浏览器 运行,您将不得不为它们付费。
请原谅我,因为我还没有真正使用过 selenium,所以我离题太远了,这个答案完全基于与只保留对 setUp
[=16 中最后创建的驱动程序的引用相关的问题=]
而不是保留一个 self.driver
你需要有一个所有驱动程序的列表,比方说 self.drivers
,然后在处理它们而不是 driver = self.driver
你会做 for driver in self.drivers:
并将所有相关代码缩进到 for 循环中,如下所示:
class HeroCarousel(unittest.TestCase):
def setUp(self):
self.drivers = [] #could make this with list comprehension
for driver_instance in globes.desired_cap:
driver = webdriver.Remote(
command_executor=globes.selenium_server_url,
desired_capabilities=driver_instance)
self.drivers.append(driver)
self.verificationErrors = []
def test_hero_carousel(self):
for driver in self.drivers:
driver.get(globes.base_url)
hero_carousel = driver.find_element(By.CSS_SELECTOR, 'div.carousel-featured')
try: self.assertTrue(hero_carousel.is_displayed())
except AssertionError, e: self.verificationErrors.append("home_test: Hero Carousel was not visible")
def tearDown(self):
for driver in self.drivers:
driver.close()
self.assertEqual([], self.verificationErrors)