У меня есть одно требование, когда мне нужно выполнить какое-либо выпадающее действие (выбрать значение из выпадающего списка) в дочернем окне, которое перенаправляется из родительского окна в течение для l oop. То есть в родительском окне есть несколько строк, и мне нужно перебрать все строки, щелкнуть гиперссылку и выбрать одно и то же значение в раскрывающемся списке. Но я постоянно сталкиваюсь с ошибкой при переключении только окна.
Следует отметить, что дочернее окно открывается в том же месте, то есть дочернее окно не является всплывающим окном, а элементы в обоих окнах находятся под iFrame с тем же именем и идентификатором.
Я сохранил все значения инцидентов, которые мне нужно повторить, в списке incident_list
.
У меня есть фрагмент кода ниже
import time
from selenium import webdriver
browser = webdriver.Firefox(executable_path=r'M:\Parvej\Softwares\Python-Selenium\geckodriver.exe')
browser.get('<URL ADDRESS>')
emailElem = browser.find_element_by_id('i0116')
emailElem.send_keys('user@gmail.com')
linkElem = browser.find_element_by_id('idSIButton9')
linkElem.click()
time.sleep(10);
list = browser.find_element_by_tag_name('iframe')
iframe1 = browser.find_element_by_id("gsft_main")
browser.switch_to.frame(iframe1)
time.sleep(10)
incident_list = []
for tr_incidents in browser.find_elements_by_partial_link_text('INC'):
incidents = tr_incidents.text
incident_list.append(incidents)
print(incident_list)
for inc in incident_list:
str1=browser.title
print(str1)
#get the window handles using window_handles( ) method
window_before = browser.window_handles[0]
print(window_before)
#since the pop-up is now in an iframe
#DID NOT SWITCH TO IFRAME BCOZ I HAVE ALREADY SWITCHED TO IT ABOVE
#browser.switch_to.frame(browser.find_element_by_id('gsft_main'))
inc_elem = browser.find_element_by_link_text(inc)
inc_elem.click()
#get the window handle after a new window has opened
window_after = browser.window_handles[1]
#switch on to new child window
browser.switch_to.window(window_after)
str2=browser.title
print(str2)
print(window_after)
#assert that main window and child window title don't match
self.assertNotEqual(str1,str2)
print('This window has a different title')
#switch back to original window
browser.switch_to.window(window_before)
#assert that the title now match
self.assertEqual(str1,browser.title)
print('Returned to parent window. Title now match')
#browser.back()
Но при этом каждый раз я получаю сообщение об ошибке:
window_after = browser.window_handles[1]
IndexError: list index out of range
Пожалуйста, помогите мне решить эту проблему.
Спасибо и С уважением,