Search code examples
testingiframeprotractorangularjs-e2eend-to-end

protractor iframe inside an iframe inside an iframe


I'm trying to get to controls inside a frame that is located inside a frame that is located inside another frame.

The last (deepest) frame is used only for login - that I manage to do.

The problem is that after the login I basically need to return to the upper frame and click a button. For some reason I keep getting the error:

NoSuchElementError: no such element

BTW, all the code in the frames is non-angular.

This is my code for the test:

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);
});

Solution

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

    From what I see in your code, you are switching to the default content, but, as you said, the button is inside the upper iframe, switch to it:

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