首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >node.js中帧的选择

node.js中帧的选择
EN

Stack Overflow用户
提问于 2016-03-01 14:18:36
回答 2查看 2.3K关注 0票数 0

由于某些原因,我无法使用node.js切换到selenium-webdriver中的嵌套框架。我已经尝试设置超时,让页面加载或超时,让驱动程序有时间切换到另一个帧,没有工作。这个问题很可能是的延续。我得到了一个NoSuchFrameError。

完整的url 这里

代码语言:javascript
复制
<!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

代码语言:javascript
复制
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对象

代码语言:javascript
复制
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;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-02 18:17:45

在进一步测试和切换驱动程序之后,我发现chrome驱动程序不支持嵌套框架集。我试着从top_page转到menu_page,也试着直接去menu_page,但都没有用。我尝试了所有类型的解决方案,直到我从chrome驱动程序切换到ie或firefox时,才能得到任何东西。我还尝试删除html文件中的嵌套框架集,然后运行chrome驱动程序,测试用例通过。这实际上是嵌套框架集和铬驱动程序的一个问题。我确实需要对此进行修复,因为这可能会影响使用铬驱动程序的自动化。

票数 0
EN

Stack Overflow用户

发布于 2016-03-01 23:13:11

我还没有用您的例子来验证自己,但大家的共识是,您不能从顶层直接切换到嵌套的<frame>,您需要首先切换到父<frame>

换句话说,进入'top_page',然后进入'main_page‘。

见对以下问题的最高答复:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35725340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档