Django Selenium 测试失败,因为它找不到单击后附加的元素

Django Selenium test is failing as it can't find element which is attached after click

我正在尝试为我的应用程序编写测试,但目前失败了。我不确定问题出在哪里,但我已经用 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"))

在页面更改之后 returns True 在测试开始之前,所以我认为这意味着所有 jQuery 过程都已完成,除非没有考虑到这一点页面特定的自定义功能?

如能帮助解决这个难题,我们将不胜感激。

经过一番挖掘,我发现点击的焦点元素是错误的。请参阅:this Whosebug answer 我适应了我的情况:

form_3.find_element_by_id(
    'id_activitygroupconfigstepkeycharacteristicfield_set-0-key_characteristic'
).find_element_by_xpath('..').click()