Javascript selenium js等待iframe完全加载

Javascript selenium js等待iframe完全加载,javascript,selenium,Javascript,Selenium,我有一个加载iframe的页面,在iframe内部有一个微调器旋转(覆盖在字段上) 我正在使用selenium切换到iframe return this.driver.wait(function() { return self.webdriver.until.ableToSwitchToFrame(self.driver.findElement(self.page.loginIframe.selector)) }, this.config.driver.defaultTimeou

我有一个加载iframe的页面,在iframe内部有一个微调器旋转(覆盖在字段上)

我正在使用selenium切换到iframe

  return this.driver.wait(function() {
    return self.webdriver.until.ableToSwitchToFrame(self.driver.findElement(self.page.loginIframe.selector))
  }, this.config.driver.defaultTimeout);
然后调用
this.driver.switchTo().frame(0)一旦上述返回true

但是,我需要等到微调器消失,输入字段准备好输入

如果我使用
驱动程序.sleep
我能够正确输入数据,但是当我尝试.element可见时,它会立即尝试输入数据,但失败了

尝试登录的代码:

var self = this;
this.waitForPageLoad().then(function pageLoaded() {
    console.log("page loaded");
    self.switchToIframe().then(function switchedToIframe() {
      console.log("switched to iframe");
      // THIS FIXES the issue, but I do not want a random sleep self.driver.sleep(10000);
      self.waitForIframeLoad().then(function iframeLoaded() {
        console.log("iframe loaded!");            
        self.setUserName(self.config.user.userName);//FAILS HERE
      });
    });
});
引发错误的代码:

Login.prototype.waitForIframeLoad = function() {
  var self = this;
  //console.log(self.webdriver.until);
  return this.driver.wait(function() {
    return self.webdriver.until.elementIsVisible(self.driver.findElement(self.page.usernameInputField.selector))
  }, this.config.driver.defaultTimeout);
};

错误消息:
NoSuchElementError:no这样的元素

我首先通过了检查,如果它存在,iframe的dom没有立即加载,这导致了错误

Login.prototype.waitForIframeLoad=function(){
var self=这个;
log(self.webdriver.until);
var deferred=this.webdriver.promise.deferred();
this.driver.wait(函数(){
//等待元素出现
返回self.driver.isElementPresent(self.page.usernameInputField.selector);
}).然后(函数(){
//然后检查它是否可见
返回self.driver.wait(self.webdriver.until.element可见(self.driver.findElement(self.page.usernameInputField.selector));
}).然后(延迟。完成);
回报。承诺;
};