Ошибка переключения окон в Selenium Python - PullRequest
1 голос
/ 26 февраля 2020

У меня есть одно требование, когда мне нужно выполнить какое-либо выпадающее действие (выбрать значение из выпадающего списка) в дочернем окне, которое перенаправляется из родительского окна в течение для 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

Пожалуйста, помогите мне решить эту проблему.

Спасибо и С уважением,

...