запустить функцию щелчка ПОСЛЕ серии для и если заявления - PullRequest
0 голосов
/ 22 марта 2019

Итак, как вы можете видеть из приведенного ниже кода;У меня есть серия циклов - начиная с цикла for, затем if, if else elif try - я использую их все для заполнения 1-веб-форма страницы с Python и Selenium.Готово;сейчас я просто пытаюсь добавить функцию щелчка ПОСЛЕ , этот код запустился ( т.е. заполнил мою веб-форму) для того, чтобы нажать мою ' кнопку сохранения ', затем«Подтвердить сохранение».

В настоящее время я пытался добавить функцию щелчка в except last else и pass и , независимо от того, что она все еще запускает до завершения заполнения формы кодом. У меня естьтакже пробовал implicit и explicit wait.

def add_assessment(self, record, map_data):
    """Create contact log"""
    qna_frame = self.driver.find_element_by_css_selector("iframe[id^='iccc']")
    self.driver.switch_to.frame(qna_frame)

    pages = self.driver.find_element_by_css_selector("ul[class='nav nav-pills nav-stacked qna-tabs']")
    pages = pages.find_elements_by_css_selector("a")

    for page in pages:
        page.click()

        questions = self.driver.find_elements_by_css_selector("fieldset")
        questions = [question for question in questions if question.text not in  ("", " ", None)]

        for question in questions[1:]:
            self.q_text = question.find_element_by_css_selector("span[class='question-text ng-binding']").text
            questionType = map_data.loc[map_data['question_text'] == self.q_text, 'question_type'].item()

            answer = map_data.loc[map_data['question_text'] == self.q_text, 'map'].item()
            answer = getattr(record, answer)

            if answer not in ("", " ", "NaT", "NaN", None):
            # while answer != "" and answer != " " and answer != "NaT":

                if questionType == 'checks':
                    self.choose_checks(question, answer)
                else:
                    try:
                        if questionType == 'text':
                            self.driver.implicitly_wait(0)

                            (question.find_element_by_css_selector("textarea").send_keys(str(answer))
                            if 
                                question.find_elements_by_css_selector("textarea")
                            else 
                                question.find_element_by_css_selector("input").send_keys(answer))

                            self.driver.implicitly_wait(15)

                        elif questionType == 'date':
                            try:
                                answer = answer.strftime('%m/%d/%Y')
                                question.find_element_by_css_selector("input").send_keys(answer)
                                page.click()

                            except Exception as e:
                                raise Errors.RequiredDataError('Issues with Assessment Date -- {}'.format(e))
                        elif questionType == 'radio':
                            question.find_element_by_css_selector("input[value='{}']".format(answer)).click()
                    except:
                        continue                              
                    else:
                        # driver.find_element_by_css_selector("#publishButton").click()
                        pass   

1 Ответ

1 голос
/ 22 марта 2019

Поместите это в конец функции, причем слово function означает тот маленький оператор def, который ее запускает. Когда что-то нарушает цикл, оно возвращается к уровню отступа, с которого начался цикл. Затем он продолжает работать до тех пор, пока не увидит что-то внутри своей области видимости, чего нет в этом цикле, поскольку он уже разорвал цикл. Другими словами, петли - одноразовая вещь. Как только он прерывается, он останавливает цикл и продолжает с того места, где он начался. Вы хотите, чтобы последний оператор находился в конце функции и на том же уровне отступа, что и строка for page in pages:.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...