2016-05-27 18 views
0

TL/DR: Im Moment startet es 2 Browser, sondern nur den Test in 1. Was ich vermisse?Selenium Hub, startet 2 Browser führt nur Test in 1 von ihnen (Selen Python)

Also versuche ich Selen Hub auf einem Mac (OS X 10.11.5) arbeiten. I installiert mit this, dann startet Nabe in einer Anschlußlasche mit:

selenium-standalone start -- -role hub 

dann in einem weiteren Register der Klemme auf derselben Maschine einen Knoten registrieren.

selenium-standalone start -- -role node -hub http://localhost:4444/grid/register -port 5556 

Es zeigt in console mit 5 verfügbaren Firefox und Chrome-Browser auf. enter image description here

Also hier ist mein Code. In einer Datei namens globes.py habe ich das.

Im Moment versuche ich nur einen einzigen Test zu starten, der so aussieht.

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

Im Moment startet es sowohl Firefox als auch Chrome, führt aber nur den Test in Firefox aus. Chrome öffnet sich und sitzt nur auf einer leeren Seite und schließt nicht. Ich nehme an, dass etwas nicht stimmt mit dem, wie ich den Test geschrieben habe. Also was fehlt mir? Ich entschuldige mich, wenn das offensichtlich ist, aber ich lerne nur, wie man Hub einrichtet, und habe gerade genug Python gelernt, um Selen-Tests vor ein paar Wochen zu schreiben.

Ich denke Hubs arbeiten, wie es beide startet, aber ich habe versucht, einen zweiten Knoten auf der gleichen Maschine an einem anderen Anschluss und bekam das gleiche. Nur für den Fall, dass hier der Hub gedruckt wird.

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} 
+1

'Selbst .driver = ... 'innerhalb der for-Schleife wird nur einen Verweis auf den letzten ... –

+0

halten, so dass es chrome startet und "self.driver" auf "webdriver.Remote" setzt und dann "self.driver" mit der Instanz für firefox überschreibt, wodurch der Verweis verloren geht die Chrome-Instanz –

+0

Danke für den Kommentar, es scheint, als würde es das erklären, aber wie starte ich mehrere Webdriver-Instanzen und halte sie verlinkt. Ich habe versucht, dem Beispiel zu folgen (http://stackoverflow.com/questions/9453327/using-selenium-web-driver-to-run-test-on-multiple-browsers), weiß es aber nicht genau Java, damit ich nicht verstehe, warum meins davon abweicht. Ich habe ein Beispiel gesehen, wo Leute nur im Browser in der Befehlszeile übergeben, aber [Leute] (http://stackoverflow.com/questions/14991393/how-do-i-set-up-a-selenium-grid-python -test-to-test-over-multiple-machine) schlagen dagegen vor. – Cynic

Antwort

2

mir verzeihen, wenn ich weg bin, da ich nicht wirklich mit Selen gearbeitet haben, ist diese Antwort lediglich auf der Grundlage der nur halten den Verweis auf den zuletzt erstellten Treiber in setUp

Statt ein verwandtes Thema zu halten self.driver Sie müssen eine Liste aller Fahrer haben, lässt self.drivers sagen, dann, wenn sie mit ihnen statt driver = self.driver tun würden Sie for driver in self.drivers: tun und alle relevanten Code in der for-Schleife einrücken, so etwas wie:

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) 
1

Sie müssen self.driver.quit() verwenden, da sonst der Browser verlassen und wird das aktuelle Fenster nicht nur schließen.

Sie werden bald mit mehreren Browsern laufen, und Sie müssen dafür bezahlen.

+0

Danke für den Tipp, aber das hilft nicht dabei, den Test in Chrome nicht auszuführen, der Grund, warum das Fenster nicht schließt, liegt daran, dass der Test nicht in Chrome läuft. – Cynic