量角器 iframe inside iframe inside iframe

protractor iframe inside an iframe inside an iframe

我正在尝试访问一个框架内的控件,该框架位于另一个框架内。

最后一个(最深的)框架仅用于登录 - 我设法做到了。

问题是登录后我基本上需要return到上框点击一个按钮。出于某种原因,我不断收到错误消息:

NoSuchElementError: no such element

顺便说一句,框架中的所有代码都是非angular。

这是我的测试代码:

it('Should get to drive sample app', function () {
  login.get();
  login.clickLogin();

  browser.ignoreSynchronization = false;

  login.goToUsecases();  //getting to the page
  $('[href="/developers/api/1542"]').click();
  browser.sleep(5000);
  //iframe issue starts here
  browser.switchTo().frame(0);
  browser.ignoreSynchronization = true;
  browser.switchTo().frame(0);
  browser.switchTo().frame(0);

  browser.driver.findElement(by.id('userName_str')).sendKeys("username");
  browser.driver.findElement(by.id('password')).sendKeys("password");
  browser.driver.findElement(by.name('submit')).click();

  // login succeeded 
  browser.sleep(10000);
  browser.driver.switchTo().defaultContent();

  browser.driver.findElement(by.id('home')).click();
  browser.sleep(10000);
});

The problem is that after the login I basically need to return to the upper frame and click a button.

从我在你的代码中看到的,你正在切换到默认内容,但是,正如你所说,按钮在上部 iframe 中,切换到它:

browser.driver.switchTo().defaultContent();
browser.switchTo().frame(0);
browser.driver.findElement(by.id('home')).click();

你可以试试这可能对你有帮助.. 因为这对我处理不同的 windows。

browser.getAllWindowHandles().then(函数(句柄){

newWindowHandle = handles[1];

browser.ignoreSynchronization = true;

browser.switchTo().window(newWindowHandle).then(function () {

    browser.sleep(500).then(function () {
        browser.ignoreSynchronization = true;

        browser.driver.findElement(by.id('userName_str')).sendKeys("username");

        browser.driver.findElement(by.id('password')).sendKeys("password");

        browser.driver.findElement(by.name('submit')).click();

//登录成功 });

    //to close the current window
    browser.driver.close().then(function () {
        //to switch to the previous window
        browser.switchTo().window(handles[0])
        browser.driver.findElement(by.id('home')).click()
        browser.sleep(10000);
    });
});

});

而不是::browser.switchTo().frame(0);

尝试提供您想要切换的 iframe 的位置。这可能会有所帮助。

// 切换到 iframe 上下文以查看 iframe 内部 browser.switchTo().frame(元素(by.tagName('iframe')));