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