Jose Martin
Jose Martin

Reputation: 1

How to run Selenium tests in parallel with python?

The selenium script below works and does what i need. But as you can see the script is pretty ugly and very redundant and my aim is to make the code smaller and less redundant.

What it does now is to initiate 5 chrome session entering 5 different credentials. I know I should be able to solve a lot by using loops but unfortunatelly my programming skills are not that good.

def setUp(self):

    self.driver1 = webdriver.Chrome("C:\chromedriver\chromedriver.exe")
    self.driver2 = webdriver.Chrome("C:\chromedriver\chromedriver.exe")
    self.driver3 = webdriver.Chrome("C:\chromedriver\chromedriver.exe")
    self.driver4 = webdriver.Chrome("C:\chromedriver\chromedriver.exe")
    self.driver5 = webdriver.Chrome("C:\chromedriver\chromedriver.exe")

def test_affersverken(self):
    ###############driver1##########################
    driver1 = self.driver1
    driver1.get("www.somepage.com")
    linkmenus = self.driver1.find_elements_by_xpath(
        ".//ul[@id='superfish-1' and @class='sf-menu menu-universe-menu sf-   horizontal sf-style-none sf-js-enabled']/li/a")
    listmenus = []
    for menus in linkmenus:
        listmenus.append(menus.text)
    lastMenu = listmenus[-1]
    WebDriverWait(self.driver1, 10).until(EC.presence_of_element_located((By.LINK_TEXT, lastMenu))).click()
    username1 = self.driver1.find_element_by_xpath(".//*[@id='edit-name']")
    username1.send_keys(someuser)
    password1 = self.driver1.find_element_by_xpath(".//*[@id='edit-pass']")
    password1.send_keys(somepassword)
    submit1 = self.driver1.find_element_by_xpath(".//*[@id='edit-submit']")
    submit1.submit()

    ###############driver2##########################
    driver2 = self.driver2
    driver2.get("www.somepage.com")
    linkmenus = self.driver2.find_elements_by_xpath(
        ".//ul[@id='superfish-1' and @class='sf-menu menu-universe-menu sf-horizontal sf-style-none sf-js-enabled']/li/a")
    listmenus = []
    for menus in linkmenus:
        listmenus.append(menus.text)
    lastMenu = listmenus[-1]
    WebDriverWait(self.driver2, 10).until(EC.presence_of_element_located((By.LINK_TEXT, lastMenu))).click()
    username2 = self.driver2.find_element_by_xpath(".//*[@id='edit-name']")
    username2.send_keys(someuser)
    password2 = self.driver2.find_element_by_xpath(".//*[@id='edit-pass']")
    password2.send_keys(somepassword)
    submit2 = self.driver2.find_element_by_xpath(".//*[@id='edit-submit']")
    submit2.submit()

    ###############driver3##########################
    driver3 = self.driver3
    driver3.get("www.somepage.com")
    linkmenus = self.driver3.find_elements_by_xpath(
        ".//ul[@id='superfish-1' and @class='sf-menu menu-universe-menu sf-horizontal sf-style-none sf-js-enabled']/li/a")
    listmenus = []
    for menus in linkmenus:
        listmenus.append(menus.text)
    lastMenu = listmenus[-1]
    WebDriverWait(self.driver3, 10).until(EC.presence_of_element_located((By.LINK_TEXT, lastMenu))).click()
    username3 = self.driver3.find_element_by_xpath(".//*[@id='edit-name']")
    username3.send_keys(someuser)
    password3 = self.driver3.find_element_by_xpath(".//*[@id='edit-pass']")
    password3.send_keys(somepassword)
    submit3 = self.driver3.find_element_by_xpath(".//*[@id='edit-submit']")
    submit3.submit()

    ###############driver4##########################
    driver4 = self.driver4
    driver4.get("www.somepage.com")
    linkmenus = self.driver4.find_elements_by_xpath(
        ".//ul[@id='superfish-1' and @class='sf-menu menu-universe-menu sf-horizontal sf-style-none sf-js-enabled']/li/a")
    listmenus = []
    for menus in linkmenus:
        listmenus.append(menus.text)
    lastMenu = listmenus[-1]
    WebDriverWait(self.driver4, 10).until(EC.presence_of_element_located((By.LINK_TEXT, lastMenu))).click()
    username4 = self.driver4.find_element_by_xpath(".//*[@id='edit-name']")
    username4.send_keys("someuser")
    password4 = self.driver4.find_element_by_xpath(".//*[@id='edit-pass']")
    password4.send_keys(somepassword)
    submit4 = self.driver4.find_element_by_xpath(".//*[@id='edit-submit']")
    submit4.submit()

    ###############driver5##########################
    driver5 = self.driver5
    driver5.get("www.somepage.com")
    linkmenus = self.driver5.find_elements_by_xpath(
        ".//ul[@id='superfish-1' and @class='sf-menu menu-universe-menu sf-horizontal sf-style-none sf-js-enabled']/li/a")
    listmenus = []
    for menus in linkmenus:
        listmenus.append(menus.text)
    lastMenu = listmenus[-1]
    WebDriverWait(self.driver5, 10).until(EC.presence_of_element_located((By.LINK_TEXT, lastMenu))).click()
    username5 = self.driver5.find_element_by_xpath(".//*[@id='edit-name']")
    username5.send_keys(someuser)
    password5 = self.driver5.find_element_by_xpath(".//*[@id='edit-pass']")
    password5.send_keys(somepassword)
    submit5 = self.driver5.find_element_by_xpath(".//*[@id='edit-submit']")
    submit5.submit()

    time.sleep(20)

def tearDown(self):
    self.driver1.quit()
    self.driver2.quit()
    self.driver3.quit()
    self.driver4.quit()
    self.driver5.quit()

Upvotes: 0

Views: 1476

Answers (1)

voy
voy

Reputation: 717

Use node or py.test, run code in pararell, one test for a thread/process, not one test for a browser. Use xdist to distribute those tests.

Upvotes: 1

Related Questions