gpt4 book ai didi

javascript - 在 InternJS 中切换框架后如何进行

转载 作者:行者123 更新时间:2023-11-30 07:58:36 24 4
gpt4 key购买 nike

谁能告诉我如何在框架切换完成后继续引用 iframe 中的元素?我已经查看了 How to switch iframes InternJS 中提供的解决方案无济于事,intern Functional Testing with Frames中的信息只是不适用(还)。以下脚本返回错误 Cannot read property 'apply' of undefined type: TypeError:

return Remote
.findAllByTagName('iframe')
.then(function (frames) {
return new Remote.constructor(Remote.session)
.switchToFrame(frames[0])
.getProperty('title')
.then(function (result) {
expect(result).to.equal('Rich text editor, rtDescAttach');
});
});

我能看到脚本失败的唯一原因是框架位置不正确。页面上有两个,我需要第一个。完成此操作后,我真的很想将对框架的引用放在页面对象中(这是我认为它所属的位置),但我必须首先能够成功找到它,所以不要本末倒置。非常感谢建议和帮助。

最佳答案

您的示例实际上非常接近。主要问题是 getProperty('title') 不会按照它的使用方式工作。 getProperty 是一个元素方法,在调用它时上下文堆栈中没有有效元素。假设您正在尝试获取 iframe 页面的标题,则需要使用 execute 回调,例如:

.switchToFrame(frames[0])
.execute(function () {
return document.title;
})
.then(function (title) {
// assert
})

Leadfoot 有一个 getPageTitle 回调,但它总是返回顶级文档的标题(标题在浏览器标题栏或选项卡中的那个)。

另一个小问题是,在回调中访问远程的更规范的方法是通过 parent 属性,例如:

.then(function (frames) {
return this.parent
.switchToFrame(frames[0])
// ...
})

如果你想访问 iframe 中的元素,你需要切换框架,重置搜索上下文,然后找到元素,例如:

.findAllByTagName('iframe')
.then(function (frames) {
return this.parent
// clear the search context in this callback
.end(Infinity)
// switch to the first frame
.switchToFrame(frames[0])
// find an element in the frame, examine its text content
.findById('foo')
.getVisibleText()
.then(function (text) {
assert.equal(text, 'expected content');
})
// switch back to the parent frame when finished
.switchToParentFrame()
})
// continue testing in parent frame

有几点需要注意:

  1. 搜索上下文对于命令链而言是本地的,因此基于this.parent 的命令链上的更改不会保留在父命令链上。基本上,不需要在回调中的命令链末尾调用 .end()
  2. 事件框架不是命令链的本地框架,因此如果您更改基于this.parent 的链上的框架,则需要重新设置它如果你想在回调后回到父框架。

关于javascript - 在 InternJS 中切换框架后如何进行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33792921/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com