Тест Django Selenium не пройден, так как не удается найти элемент, прикрепленный после нажатия - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь написать тест для своего приложения, но в настоящее время оно не выполняется. Я не уверен, в чем проблема, но я попробовал это с WebDriverWait и даже time.sleep(), но это не решило проблему.

Неудачная часть теста выглядит следующим образом:

form_2.find_element_by_css_selector('.btn-primary').click() # submits form_2 and changes page to next form
self.assertEqual(
    self.get_current_url(),
    self.live_server_url + reverse(
        'activitygroupconfigstepkeycharacteristicfieldset_update', kwargs={'activitygroupconfig_pk': 1}
    )
) # test to see if expected url is correct

# Fill out next form (i.e. Key Characteristics)
form_3 = self.driver.find_element_by_xpath('//form[@role="form"]')
form_3.find_element_by_css_selector(
    '#div_id_activitygroupconfigstepkeycharacteristicfield_set-0-key_characteristic'
).click()
assert form_3.find_element_by_css_selector('.select2-container--open').is_displayed() is True # I'm getting this error: selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".select2-container--open"} here so the click clearly isn't working.

Что должно произойти, это то, что элемент щелкается, а затем в DOM вставляется новый элемент. Но поскольку утверждение неверно, этого явно не происходит. Я также сделал print(self.driver.page_source) после клика и вижу, что элемент не добавляется, поэтому по какой-то причине клик не регистрируется.

Я подумал, что это может быть связано с тем, что некоторые пользовательские сценарии jQuery не были завершены до того, как тест будет выполнен на странице, но я добавил это:

def wait_script(self):
    WebDriverWait(self.driver, 10).until(lambda s: s.execute_script("return jQuery.active == 0"))

после изменения страницы и возврата True до начала теста, поэтому я предполагаю, что это означает, что все процессы jQuery завершены, если только это не учитывает пользовательские функции, специфичные для страницы?

Любая помощь с этой загадкой будет высоко ценится.

1 Ответ

0 голосов
/ 05 июля 2018

После некоторого копания я обнаружил, что элемент фокусировки для щелчка был неправильным. Смотрите: этот ответ на стекопоток , который я адаптировал для работы в моем случае:

form_3.find_element_by_id(
    'id_activitygroupconfigstepkeycharacteristicfield_set-0-key_characteristic'
).find_element_by_xpath('..').click()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...