Есть ли способ вспомнить старый DOM или состояние при навигации между страницами с помощью веб-драйвера Python и Selenium? - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть список курсов на странице A, после нажатия кнопки «Изменить» для курса я перехожу на страницу B, где я выполняю определенные действия.При нажатии кнопки «Сохранить и вернуть» я возвращаюсь на страницу А, где я хочу щелкнуть и отредактировать следующий элемент в списке.Проблема в том, что я теряю DOM или состояние (не знаю, как ссылаться на него) предыдущего элемента в списке, это приводит к разрыву цикла без перехода к следующему элементу и выполнения необходимых действий.

#iterate backup ul with each year and faculty
lists = ['2018-1','2017-1','2017-2','2016-2','2016-3']
faculties = ['FEA','FMSS','FNAHSW','FST','ODL']
for link_text in lists:
    link = driver.find_element_by_link_text(link_text)
    link.click()
    time.sleep(1)
    for facs in faculties:
        link = driver.find_element_by_link_text(facs)
        link.click()
        #check to see if faculties have courses
        if driver.find_element_by_class_name('dimmed').text != 0:
            #traverse course list
            resultSet = driver.find_element_by_class_name('course-list')
            options = resultSet.find_elements_by_tag_name("li")          
            #traverse and click each edit course button
            for option in options:
                time.sleep(3)
                option.find_element_by_class_name('action-edit').click()
                #inside edit page
                #convert to CAPS
                Inputelement = driver.find_element_by_id('id_fullname')
                time.sleep(1)
                String = Inputelement.get_attribute('value')
                time.sleep(1)
                Inputelement.send_keys(Keys.CONTROL + "a")
                Inputelement.send_keys(Keys.DELETE)
                time.sleep(1)
                Inputelement.send_keys(String.upper())
                #save and return
                driver.find_element_by_id('id_saveandreturn').click()

        else:
            print ('List has no courses')
        time.sleep(1)

1 Ответ

0 голосов
/ 05 апреля 2019

Добро пожаловать на SO.Я бы рекомендовал использовать индекс в каждой итерации, а не пытаться получить доступ к ранее сохраненным элементам.Если вы ссылаетесь на параметры в Исходном сообщении (OP), измените список options на следующий.

# Get the number of options
options = driver.find_elements_by_xpath("//*[@class='course-list']/li")
# iterate through each option
for optionCounter in range(len(options)):
    # get the option here based on index
    option = driver.find_element_by_xpath("(//*[@class='course-list']/li)[" + str(optionCounter) + "]")
    # continue working with option from here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...