【发布时间】:2016-05-27 17:36:03
【问题描述】:
TL/DR:现在它启动 2 个浏览器,但只运行 1 个中的测试。我错过了什么?
所以我试图让 selenium hub 在 mac (OS X 10.11.5) 上工作。我安装了this,然后在终端选项卡中启动集线器:
selenium-standalone start -- -role hub
然后在同一台机器上的另一个终端选项卡中注册一个节点。
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,但只在 Firefox 中运行测试。 Chrome 会打开,只是停留在空白页面上,不会关闭。所以我认为我编写测试的方式有问题。那么我错过了什么?如果这很明显,我深表歉意,但我只是在学习如何设置集线器,几周前刚刚学会了足够的 python 来编写 selenium 测试。
我认为集线器在启动两者时都能正常工作,但我确实尝试在同一台机器上的不同端口上添加第二个节点并得到相同的结果。以防万一这就是中心打印出来的内容。
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 = ...在 for 循环中只会保留对最后一个的引用... -
所以它会启动 chrome 并将
self.driver设置为webdriver.Remote,然后用 firefox 的实例覆盖self.driver,从而丢失对 chrome 实例的引用。 -
我还看到人们指定 driver1 和 driver2 然后为每个浏览器复制他们的测试,但似乎必须有比这更好的方法。
标签: python selenium automated-tests selenium-grid qa