#python #function #selenium
#python #функция #селен
Вопрос:
У меня есть 3 функции. Login, Contacts_object и Object_menu . Каков наилучший способ собрать их вместе, чтобы я мог их запустить. У меня возникли проблемы с передачей переменной driver функциям Contacts_object и Object_menu, как это объявлено в Login . Это 3 вложенных цикла for . как только вы дойдете до конца 3-го цикла for, драйвер должен закрыться, и мы начнем снова со следующего входа в функцию входа.
Я попытался поместить драйвер в отдельный файл .py и импортировать его. однако это не работает.
def login(Test_Account, Password):
launch url
url = "XXXXXXXX"
for x, y in zip(Test_Account, Password):
driver = webdriver.Chrome()
driver.implicitly_wait(1)
driver.get(url)
username = driver.find_element_by_id("FORMLOGINid")
password = driver.find_element_by_id("FORMLOGINpwd")
username.send_keys(x)
password.send_keys(y)
python_button = driver.find_element_by_id('btSubmit') #
python_button.click() #click
driver.implicitly_wait(1)
def contacts_object(Open_Contacts):
for b in Open_Contacts:
##########################################################
python_menu_dropdown = driver.find_element_by_id('id_arrow_popup_menu')
python_menu_dropdown.click()
time.sleep(1)
############################################################################
python_menu_open = driver.find_element_by_id('id_popup_OPEN')
python_menu_open.click()
time.sleep(1)
x = driver.find_element_by_xpath(b)
x.click()
time.sleep(2)
search_contact = driver.find_element_by_id('id_searchfield')
search_contact.clear()
time.sleep(1)
search_contact = driver.find_element_by_id('id_searchfield')
search_contact.send_keys("Test, Acco")
time.sleep(1)
search_contact.send_keys(Keys.DOWN Keys.ENTER)
time.sleep(5)
def object_menu(Profile, folders):
for z in folders:
drop_down = driver.find_element_by_id('folder_panels_arrow')
drop_down.click()
if z == len(folders):
break
#print(z)
try:
python_menu_open = driver.find_element_by_xpath(z)
driver.implicitly_wait(10)
if EC.element_to_be_clickable(z):
python_menu_open.click()
driver.implicitly_wait(20)
time.sleep(20)
page = driver.execute_script("return document.body.innerHTML").encode('utf-8') #returns the inner HTML as a string
soup = BeautifulSoup(page, 'html.parser')
soup = soup.prettify()
t = time.localtime()
timestamp = time.strftime('%b-%d-%Y_%H%M', t)
filepath = os.path.join("XXXXXXXXXXXXX")
time.sleep(5)
h = open(filepath, "w")
h.write(soup)
h.close()
except NoSuchElementException:
f = open(r'XXXXXXXXXXXXX')
f.write(str(Profile ) " not there" 'n')
f.close()
driver.close()
Комментарии:
1. Сделать
class
?2. Кто-нибудь может помочь мне настроить класс на python, я никогда раньше не использовал класс. Спасибо
3. Вопрос не по теме, но это должно указать вам правильное направление: selenium-python.readthedocs.io/page-objects.html
4. Как мне настроить класс, чтобы при достижении конца цикла For в def Login я запускал цикл For в def contacts_object?
5. можно ли в любом случае сохранить их в виде 3 отдельных файлов .py и вызвать их из одного файла?