I have successfully configured SeleniumGrid to run my Python tests on multiple computers with different OS and browsers. However, I still have to write the same test case 3 times, once for each node, because the link to the node is inside the test case.
I looked at all kinds of online offers for Python, for example. separating node, they go into external files and import them into a test case, but none of them work or instructions for Java.
With this from Mozilla, I'm not sure how to install this file with my test cases / how to run it: http://viewvc.svn.mozilla.org/vc/projects/sumo/tests/frontend/python_tests/suite_sumo.py?view = markup
How to install Python test cases, so I only write once?
My Hub command line instruction:
java -jar selenium-server-standalone-2.29.0.jar -host http://localmachineipaddress -port 4444 -role hub
My Nodes command line instructions:
*FireFox PC, Chrome PC, Safari PC, and IE9 PC on local machine* java -jar selenium-server-standalone-2.29.0.jar -host localhost -role webdriver -hub http://theHubIP:4444/grid/register -port 5555 -browser browserName=firefox,maxInstances=5,platform=WINDOWS -browser browserName=chrome,maxInstances=5,platform=WINDOWS -Dwebdriver.chrome.driver=c:\SeleniumGrid\chromedriver.exe -browser browserName=iehta,maxInstances=5,platform=WINDOWS -Dwebdriver.ie.driver=c:\SeleniumGrid\IEDriverServer.exe -browser browserName=safari,maxInstances=5,platform=WINDOWS -Dwebdriver.safari.driver=c:\Python27\SafariDriver2.28.0.safariextz *FireFox MAC, Safari MAC, and Chrome MAC machine* java -jar selenium-server-standalone-2.29.0.jar -role webdriver -hub http://theHubIP:4444/grid/register -debug -port 5556 -browser browserName=firefox,maxInstances=5,platform=MAC -browser browserName=chrome,maxInstances=5,platform=MAC -browser browserName=safari,maxInstances=5,platform=MAC -Dwebdriver.safari.driver=c:\Python27\SafariDriver2.28.0.safariextz *IE8 PC machine* java -jar selenium-server-standalone-2.29.0.jar -role webdriver -hub http://theHubIP:4444/grid/register -port 5559 -browser browserName=iehta,maxInstances=5,platform=WINDOWS -Dwebdriver.ie.driver=c:\SeleniumGrid\IEDriverServer.exe
My Test Case command line instructions:
python Python27/Test_Cases/SeleniumTest.py 5555 firefox WINDOWS python Python27/Test_Cases/SeleniumTest.py 5555 chrome WINDOWS python Python27/Test_Cases/SeleniumTest.py 5555 iehta WINDOWS python Python27/Test_Cases/SeleniumTest.py 5555 safari WINDOWS python Python27/Test_Cases/SeleniumTestIE8.py 5559 iehta WINDOWS python Python27/Test_Cases/SeleniumTestApple.py 5556 chrome MAC python Python27/Test_Cases/SeleniumTestApple.py 5556 firefox MAC python Python27/Test_Cases/SeleniumTestApple.py 5556 safari MAC
My test case:
# coding: utf-8 from selenium import webdriver from selenium.common.exceptions import TimeoutException from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.keys import Keys import HTMLTestRunner import unittest, time import sys class SeleniumTest1(unittest.TestCase): def setUp(self): self.driver = webdriver.Remote(command_executor="http://theNodeIP:5555/wd/hub",desired_capabilities={ "browserName": browser, "platform": platform, "node":node }) self.driver.implicitly_wait(2) def mytest(self): self.driver.get("http://url.com") self.driver.find_element_by_css_xpath("test_some_stuff").click() def tearDown(self): self.driver.quit() def suite(): s1 = unittest.TestLoader().loadTestsFromTestCase(SeleniumTest1) return unittest.TestSuite([s1]) def run(suite, report = "C:\\Python27\\Test_Cases\\Reports\\SeleniumTest1.html"): with open(report, "w") as f: HTMLTestRunner.HTMLTestRunner( stream = f, title = 'SeleniumTest1', verbosity = 2, description = 'SeleniumTest1' ).run(suite) if __name__ == "__main__": args = sys.argv node=args[1] browser = args[2] platform = args[3] run(suite())