#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 с этим, не так ли?