我尝试使用phantomjs webdriver在基于selenium的测试中模拟链接元素上的click事件,到目前为止没有成功...
我正在使用的代码是:
from django.test import LiveServerTestCase
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver import PhantomJS
from selenium.common.exceptions import WebDriverException
class IndexTest(LiveServerTestCase):
def test_index_click(self):
webdriver = PhantomJS()
webdriver.get(self.live_server_url)
self.assertTrue(webdriver.find_element_by_css_selector('#header_nav #referral a[href]'))
previous_url = webdriver.current_url
webdriver.find_element_by_css_selector('#header_nav #referral a[href]').click()
WebDriverWait(webdriver, 10).until(lambda driver: driver.current_url != previous_url)
def test_index_get(self):
webdriver = PhantomJS()
webdriver.get(self.live_server_url)
self.assertTrue(webdriver.find_element_by_css_selector('#header_nav #referral a[href]'))
previous_url = webdriver.current_url
webdriver.get(webdriver.find_element_by_css_selector('#header_nav #referral a[href]').get_attribute('href'))
WebDriverWait(webdriver, 10).until(lambda driver: driver.current_url != previous_url)
以上的输出是:
E.
======================================================================
ERROR: test_index_click (functional_tests.tests.IndexTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "[path cut]browse_page_as_anonymous_user.py", line 20, in test_index_click
WebDriverWait(webdriver, 10).until(lambda driver: driver.current_url != previous_url)
File "[path cut]lib/python2.7/site-packages/selenium/webdriver/support/wait.py", line 75, in until
raise TimeoutException(message, screen, stacktrace)
TimeoutException: Message:
----------------------------------------------------------------------
Ran 2 tests in 29.775s
FAILED (errors=1)
所以,你可以看到我做了两个测试只是为了确保链接没有被破坏 - 是的,第二个测试,当我手动检索“href”属性的值并让phantomjs只检索那个uri ,通过正确...我尝试添加一个更长的超时(以防万一直到300秒),但它没有任何区别...
当我添加一个try / except块来捕获异常并触发屏幕保存时,屏幕截图仍显示原始页面(显然在第二次测试中显示正确的目标页面)......但有趣的是,当我以这种方式修改失败的测试时:
def test_index_click(self):
webdriver = PhantomJS()
webdriver.get(self.live_server_url)
self.assertTrue(webdriver.find_element_by_css_selector('#header_nav #referral a[href]'))
previous_url = webdriver.current_url
webdriver.find_element_by_css_selector('#header_nav #referral a[href]').click()
webdriver.find_element_by_css_selector('#header_nav #referral a[href]').click()
WebDriverWait(webdriver, 10).until(lambda driver: driver.current_url != previous_url)
确保我可以再次“点击”该链接,该元素不再存在并且它会引发:
ElementNotVisibleException: Message: {"errorMessage":"Element is not currently visible and may not be manipulated"(...)
当然,我尝试了其他一些方法,但这个方法似乎是最简单的情况,我不知道为什么它无法工作......
供参考,我使用的是python 2.7.3,phantomjs 2.0.0和selenium 2.45.0
感谢您提供有关我可能做错的任何线索......
更新:为了清楚起见,我并不太关心“ElementNotVisibleException” - 这只是我引用的一个有趣的后续行动,因为这可能暗示了对这个主题更精通的人但真正的问题仍然是在链接元素上执行click()确实没有任何东西 ......这就是我试图通过向更多的受众提出问题来解决的问题这里...