javascript - 登录操作后无法找到元素

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

我正在使用 NightWatchJS 编写一些自动化程序。我有一个简单的测试场景,我在其中执行以下操作

  1. 打开网址
  2. 登录
  3. 验证元素
  4. 验证 iframe 元素

我有一个带有提交按钮的简单登录页面。登录后的内页也有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 详细信息。

Selenium Details

提前致谢。

最佳答案

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

你能试试这个吗:

  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:对于元素“body”,您应该检查“存在与否”而不是“可见与否”

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

而不是

waitForElementVisible('body',5000,false)

关于javascript - 登录操作后无法找到元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37339224/

相关文章:

javascript - 更改具有 alt =“selected” 的 <td> 内的图像源。图片没有 ID 标签

javascript - 防止 anchor 跟随 href

python - 获取 XKCD 图像的 src 链接?

excel - 等到 selenium excel vba 中出现特定值

firefox - 45000毫秒内无法绑定(bind)锁定端口7054 : webdriver firefox

iphone - 如何改进 iPhone UI 自动化?

c# - 为什么在为 Silverlight 5 应用程序添加编码 UI 支持时 System.Core 加载失败?

javascript - 谁能解释一下这段代码:

javascript - 在哪里放置额外的库

java - 在 Selenium 中选择不同行中的按钮