登录操作后无法找到元素

时间:2016-05-20 06:16:37

标签: javascript selenium-webdriver ui-automation selenium-chromedriver nightwatch.js

我正在使用NightWatchJS编写一些自动化。我有一个简单的测试场景,我做了以下的事情

  1. 打开网址
  2. 登录
  3. 验证元素
  4. 验证iframe元素
  5. 我有简单的登录页面和提交按钮。登录后,内页也有iframe。一旦登录操作成功,iframe中的文本字段就会聚焦于javascript。

    我的NightWatch测试代码

    module.exports = {
      before: function(browser) {
        console.log("Setting up...");
        browser
          .maximizeWindow()
      },
    
      after : function(browser) {
        browser
          .end()
        console.log("Closing down...");
      },
    
      'Check Form Elements' : function (browser) {
        browser
          .url("siteurl") 
          .waitForElementVisible("body", 1000)
          .waitForElementPresent('#email', 10000)
          .setValue('#email','me@a5his.com')
          .waitForElementPresent('#password', 10000)
          .setValue('#password', 'encrypted')
          .submitForm('#login_form', function(result){
            console.log(result)
          })
          .pause(5000)
          .waitForElementVisible('body', 10000)
          .waitForElementVisible('li.active', 5000)
          .assert.containsText('li.active', "Home")
          .assert.elementPresent('#iframeone')
          .frame('iframeone')
            .waitForElementVisible('.wi-wrap', 5000)
            . assert.containsText('header h1', 'Messages')
      }
    };
    

    此测试通过表单提交后,表示

    Timed out while waiting for element <body> to be present for 10000 milliseconds.  - expected "visible" but got: not found
    

    我使用的是Chrome 50,ChromeDriver 2.21.371459,OS X - El Capitan。 我在下面附上了我的硒细节。

    Selenium Details

    提前致谢。

1 个答案:

答案 0 :(得分:0)

成功登录后您的页面是否重定向?

你可以试试这个:

  browser
  .url("siteurl") 
  .waitForElementVisible('#email', 10000,false)
  .setValue('#email','me@a5his.com') 
  .setValue('#password', 'encrypted')
  .click('#login_form')
  .waitForElementVisible('li.active', 5000,false)
  .verify.containsText('li.active', "Home")
  .verify.elementPresent('#iframeone')
  .frame('#iframeone')
  .waitForElementVisible('.wi-wrap', 5000,false)
  .verify.containsText('header h1', 'Messages')

如果帧ID缺失或为空,请记住,服务器应切换到页面的默认内容。所以选择器应该如下所示,以确保它在那里并且是唯一的。

'input[name=username]',
'button[name=login]',
'iframe[class=iframeone]'

编辑1:对于元素&#39; body&#39; ,你应该检查“是否存在”。而不是&#39;是否可见&#39;

尝试waitForElementPresent('body',5000,false)

而不是

waitForElementVisible('body',5000,false)

相关问题