我试图控制位于另一个框架内的框架内的框架内的控件。
最后一个(最深的)框架仅用于登录 - 我设法做到了。
问题是登录后我基本上需要返回上框并单击按钮。出于某种原因,我不断收到错误:
BTW,帧中的所有代码都是非角度的。NoSuchElementError:没有这样的元素
这是我的测试代码:
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);
});
答案 0 :(得分:2)
问题是登录后我基本上需要返回上框并单击按钮。
从我在你的代码中看到的,你正在切换到默认内容,但正如你所说,按钮在上面的iframe中,切换到它:
browser.driver.switchTo().defaultContent();
browser.switchTo().frame(0);
browser.driver.findElement(by.id('home')).click();
答案 1 :(得分:0)
你可以尝试这可能会对你有所帮助..因为这对我来说可以处理不同的窗口。
browser.getAllWindowHandles()。then(function(handles){
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);
});
});
});
答案 2 :(得分:0)
而不是:: browser.switchTo()。frame(0);
尝试给你想要切换的iframe的位置..这可能会有所帮助。
//切换到iframe上下文以查看iframe内部 。browser.switchTo()帧(元素(by.tagName(' iframe中')));