Я пытаюсь написать тест для своего приложения, но в настоящее время оно не выполняется. Я не уверен, в чем проблема, но я попробовал это с 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
завершены, если только это не учитывает пользовательские функции, специфичные для страницы?
Любая помощь с этой загадкой будет высоко ценится.