由于某些原因,我无法使用node.js切换到selenium-webdriver中的嵌套框架。我已经尝试设置超时,让页面加载或超时,让驱动程序有时间切换到另一个帧,没有工作。这个问题很可能是这的延续。我得到了一个NoSuchFrameError。
完整的url 这里
<!DOCTYPE html>
<html>
<head>
<title>HTML Target Frames</title>
</head>
<frameset rows="16%,84%">
<frame src="./framesHtml/top.htm" name="top_page" >
<frameset cols="50%,50%">
<frame src="./framesHtml/menu.htm" name="menu_page" >
<frame src="./framesHtml/main.html" name="main_page" >
</frameset>
</frameset>
</html>功能切换到main_page
var webdriver = require('selenium-webdriver');
var chrome = require('selenium-webdriver/chrome');
var chromePath = require('selenium-chromedriver').path;
var FrameHandler = require('../../JS-Selenium-Toolkit/src/FrameHandler');
var expect = require('chai').expect;
describe('FrameHandler', function () {
it('Should pass if the set frame is main_page', function (done) {
this.timeout(15000);
var service = new chrome.ServiceBuilder(chromePath).build();
chrome.setDefaultService(service);
var chromeDriver = new webdriver.Builder()
.withCapabilities(webdriver.Capabilities.chrome())
.build();
var frameHandler = new FrameHandler(chromeDriver);
//check current frame name
frameHandler.getCurrentFrameName(function (name) {
console.log(name + ' current frame inside second function');
});
chromeDriver.get('http://orasi.github.io/Selenium-Java-Core/sites/unitTests/orasi/utils/frameHandler.html').then(function () {
frameHandler.switchToFrame('top_page').then(function () {
frameHandler.switchToFrame('main_page').then(function () {
frameHandler.getCurrentFrameName(function (name) {
console.log(name + ' this frame was switched to ');
expect(name).to.equal('main_page');
done();
});
});
});
});
});
});FrameHandler对象
var webdriver = require('selenium-webdriver');
var FrameHandler = function (driver) {
this.switchToFrame = function (name)
{
if (typeof name !== 'string' || name === '' || !name)
{
console.log('error');
}
else
{
console.log(this.getCurrentFrameName(function (name) {
console.log(name + ' this is the current frame before switch');
}));
console.log(name + ' switch to this frame');
return driver.switchTo().frame(name);
}
};
this.getCurrentFrameName = function (callback)
{
driver.executeScript('return self.name').then(function (name)
{
return callback(name);
});
};
};
module.exports = FrameHandler;发布于 2016-03-02 18:17:45
在进一步测试和切换驱动程序之后,我发现chrome驱动程序不支持嵌套框架集。我试着从top_page转到menu_page,也试着直接去menu_page,但都没有用。我尝试了所有类型的解决方案,直到我从chrome驱动程序切换到ie或firefox时,才能得到任何东西。我还尝试删除html文件中的嵌套框架集,然后运行chrome驱动程序,测试用例通过。这实际上是嵌套框架集和铬驱动程序的一个问题。我确实需要对此进行修复,因为这可能会影响使用铬驱动程序的自动化。
发布于 2016-03-01 23:13:11
我还没有用您的例子来验证自己,但大家的共识是,您不能从顶层直接切换到嵌套的<frame>,您需要首先切换到父<frame>。
换句话说,进入'top_page',然后进入'main_page‘。
见对以下问题的最高答复:
https://stackoverflow.com/questions/35725340
复制相似问题