Одновременный запуск двух пользователей в Selenium Python

#python #selenium-webdriver #selenium-chromedriver

#python #selenium-webdriver #selenium-chromedriver

Вопрос:

У меня есть скрипт, в котором я регистрирую двух пользователей на двух веб-страницах, один в обычном режиме, а другой в режиме инкогнито. Я хочу запустить оба веб-драйвера одновременно. Я не мог понять, что использовать. Я только что определил две отдельные функции. Я хочу, чтобы они запускались одновременно. Должен ли я использовать многопоточность, многопроцессорность или что-то еще, связанное с Selenium? Мой код выглядит следующим образом:

 def user_qsinav_normal(username, password):
    options = webdriver.ChromeOptions()
    #options.add_argument("--incognito")
    options.add_experimental_option("detach", True)

    driver = webdriver.Chrome(executable_path=r"C:Users**DesktopChromeDriverchromedriver.exe", options=options)

    driver.get("https://demo.qsinav.com/")
    driver.maximize_window()
    driver.find_element_by_xpath("/html/body/nav/div/div[3]/ul/li[2]/a").click()

    print("Looking for the email element!")
    user_input = driver.find_element_by_id("email")
    user_input.send_keys(username)

    print("Looking for the password element!")
    password_input = driver.find_element_by_id("password")
    password_input.send_keys(password)

    print("Looking for the giris element!")
    giris_buton = driver.find_element_by_xpath("/html/body/div[1]/div[2]/div/div/div/form/div[2]/div[3]/button")
    giris_buton.click()

    print("Looking for the sinav modulü element!")
    sinav_modulu = driver.find_element_by_xpath("/html/body/div[2]/div/nav/ul/li[4]/a")
    sinav_modulu.click()
    driver.implicitly_wait(5)

    print("Looking for the sınavlar element!")
    sinavlar = driver.find_element_by_xpath("/html/body/div[2]/div/nav/ul/li[4]/ul/li[1]/a")
    sinavlar.click()
    driver.implicitly_wait(5)

    print("Looking for the sınavi baslat element!")
    sinavi_baslat = driver.find_element_by_css_selector("#datatableExam > tbody > tr > td:nth-child(7) > div > button")
    sinavi_baslat.click()




def user_qsinav_gizli(username, password):
    options = webdriver.ChromeOptions()
    options.add_argument("--incognito")
    options.add_experimental_option("detach", True)

    driver = webdriver.Chrome(executable_path=r"C:Users**DesktopChromeDriverchromedriver.exe", options=options)

    driver.get("https://demo.qsinav.com/")
    driver.maximize_window()
    driver.find_element_by_xpath("/html/body/nav/div/div[3]/ul/li[2]/a").click()

    print("Looking for the email element!")
    user_input = driver.find_element_by_id("email")
    user_input.send_keys(username)

    print("Looking for the password element!")
    password_input = driver.find_element_by_id("password")
    password_input.send_keys(password)

    print("Looking for the giris element!")
    giris_buton = driver.find_element_by_xpath("/html/body/div[1]/div[2]/div/div/div/form/div[2]/div[3]/button")
    giris_buton.click()

    print("Looking for the sinav modulü element!")
    sinav_modulu = driver.find_element_by_xpath("/html/body/div[2]/div/nav/ul/li[4]/a")
    sinav_modulu.click()
    driver.implicitly_wait(5)

    print("Looking for the sınavlar element!")
    sinavlar = driver.find_element_by_xpath("/html/body/div[2]/div/nav/ul/li[4]/ul/li[1]/a")
    sinavlar.click()
    driver.implicitly_wait(5)

    print("Looking for the sınavi baslat element!")
    sinavi_baslat = driver.find_element_by_css_selector("#datatableExam > tbody > tr > td:nth-child(7) > div > button")
    sinavi_baslat.click()


user_qsinav_normal(USERNAME1, PASSWORD1)
user_qsinav_gizli(USERNAME2, PASSWORD2)


  

Ответ №1:

Многопоточность работает для меньших чисел.

если вы ищете 10-100 пользователей, подобных тем, о которых вы упомянули в комментарии (у меня недостаточно репутации, чтобы комментировать, поэтому отвечаю в ответе), запускать их на одной машине не очень хорошая идея.

Selenium grid реализован по той же причине: 1) Параллельное выполнение тестов, 2) Выполнение одних и тех же тестов с разными браузерами, комбинациями ОС.

итак, мое предложение — попробовать selenium grid.

Если вас интересует решение на основе docker — вы можете использовать Zalenium или Selenium docker

Комментарии:

1. Спасибо, сэр. Я поищу это.

Ответ №2:

Попробуйте использовать многопоточность:

 import threading

t1 = threading.Thread(target=user_qsinav_normal, args=(USERNAME1, PASSWORD1))
t2 = threading.Thread(target=user_qsinav_gizli, args=(USERNAME2, PASSWORD2))
t1.start()
t2.start()
  

Комментарии:

1. о, большое спасибо. В случае, если я хочу войти в систему 10-100 пользователей, какой подход был бы лучшим? Я знаю, что на самом деле не очень хорошая идея задавать здесь другой вопрос, но…

2. Ну, Селену нужно много оперативной памяти и процессора, возможно, попробуйте использовать запросы вместо selenium.

3. Попробуйте распараллелить свой тест. Потоки хороши только тогда, когда у вас очень ограниченный процесс.

4. Спасибо за комментарии. Я буду искать параллельное тестирование. Selenium Grid кажется мне полезным. Я смогу войти в систему с пользователями 1k с этим, не так ли?