2015-05-17 7 views
2

Я пытаюсь получить элементы управления внутри рамки, которая находится внутри рамки, которая находится внутри другого фрейма.транспортир iframe внутри iframe внутри iframe

Последний (самый глубокий) кадр используется только для входа - что мне удается.

Проблема в том, что после входа в систему мне в основном нужно вернуться к верхнему фрейму и нажать кнопку. По какой-то причине я продолжаю получать ошибку:

NoSuchElementError: no such element

BTW, весь код в кадрах не угловой.

Это мой код для теста:

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

ответ

2

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(); 
+0

правый как всегда. благодаря! – user2880391

0

Вы можете попробовать это, возможно, это поможет вам. Поскольку это работает для меня для обработки разных окон. .

browser.getAllWindowHandles() затем (функция (ручки) {

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

});

+0

Речь идет не о окнах, а о кадрах. – alecxe

0

Вместо :: browser.switchTo(). Frame (0);

попробуйте указать место iframe, куда вы хотите переключиться тоже .. это может помочь.

// Переключиться в контекст iframe, чтобы видеть внутри iframe browser.switchTo(). Frame (element (by.tagName ('iframe')));

Смежные вопросы