【问题标题】:Selenium & django testingSelenium 和 Django 测试
【发布时间】:2016-08-05 11:10:20
【问题描述】:

我正在尝试单击navbar 中的链接以触发第三方身份验证模式,我需要对其进行测试。我之前有一些关于如何获取和点击硒的帮助,在此之前一切都很好。 这是我要点击的链接

<li class="pull-right hidden-xs hidden-sm" id="showlogin"><a href="#"><button type="button" class="btn btn-sm btn-info round">GET STARTED</button></a></li>

我的测试结构是:

def test_live_societe_login_using_third_party_modal(self):
    """TODO: Docstring for test_live_societe_login_third_party_modal.
    :returns: return modal for third party authentication

    """
    WebDriverWait(self.browser, 10).until(lambda browser:
                                          self.browser.find_element_by_id
                                          ('showlogin')).click()
    self.assertIn('http://societe.herokuapp.com/contact', self.browser.current_url)

我能够测试所有应用程序页面,但点击这个我得到了selenium.common.exceptions.ElementNotVisibleException: Message: Element is not currently visible and so may not be interacted with 异常。有点迷茫,谁能帮帮我,谢谢。

【问题讨论】:

  • Selenium 不允许您单击隐藏元素。您可以像这个问题一样使用 javascript 进行点击操作:stackoverflow.com/questions/12040615/…
  • 对不起,回复晚了,我想我知道出了什么问题,稍后再回答,不过谢谢。

标签: django python-3.x selenium django-testing


【解决方案1】:

好的,我以错误的方式锁定了这个,在我的navbar 中,我构造了这样的GET STARTED 按钮:

<li class="pull-right hidden-xs hidden-sm" id="showlogin"><a href="#"><button type="button" class="btn btn-sm btn-info round">GET STARTED</button></a></li>
<li class="dropdown hidden-md hidden-lg" id="showlogin">
    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="false" aria-expanded="false"><button type="button" class="btn btn-sm btn-info round">GET STARTED</button></a>
         <ul class="dropdown-menu">
             <li class="btn-group-vertical"><a id="facebook_login" href="/accounts/facebook/login" method="js-sdk" class="btn btn-default navbar-btn"><i class="fa fa-facebook"></i>&nbsp;Sign in with Facebook</a>
                 <a id="linkedin_login" href="/accounts/linkedin/login" class="btn btn-default navbar-btn"><i class="fa fa-linkedin"></i>&nbsp;Sign in with LinkedIn</a>
                 <a id="twitter_login" href="/accounts/twitter/login" class="btn btn-default navbar-btn"><i class="fa fa-twitter"></i>&nbsp;Sign in with Twitter</a></li>
                </ul>
            </li>

您可以看到我有两个&lt;li&gt;&lt;/li&gt; 标签,一个是用于较大viewport 的按钮,另一个标签具有用于较小viewportdropdown 菜单。首先,我没有选择正确的&lt;li&gt;&lt;/li&gt; 标签。当selenium 开始测试时,他打开了一个平板视图浏览器(≥768px),这改变了我需要选择dropdown 然后找到一个按钮来点击并触发第三方身份验证的情况。

我可以选择dropdownCss selector,所以我只是find_element_by_css_selector('div#navbar ul li.dropdown'),之后我选择了正确的社交按钮。我现在需要做的就是处理社交身份验证。

这是选择dropdown和第三方认证社交按钮的代码:

def test_live_societe_login_using_third_party_modal(self):
    """TODO: Docstring for test_live_societe_login_third_party_modal.
    :returns: return modal for third party authentication

    """
    dropSelect = WebDriverWait(self.browser, 20).until(
        lambda browser: (self.browser.find_element_by_css_selector('div#navbar ul li.dropdown')))
    dropSelect.click()
    twitter_choice = dropSelect.find_element_by_id('twitter_login')
    twitter_choice.click()

【讨论】:

    猜你喜欢
    • 2013-01-19
    • 2012-11-11
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    • 2015-03-12
    • 2012-12-21
    相关资源
    最近更新 更多