- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的程序使用 printJS这是一个帮助格式化页面内容以供打印的库。我想用 cypress 编写测试来测试是否调用了打印预览。目前我有一个按钮在单击时调用 printJS,并且由于 cypress 无法与打印预览窗口交互,我认为将对 printJS 的调用 stub 然后写一个它被调用一次的断言是个好主意。我知道这适用于 window.print(),因为您可以使用此代码 stub 。
cy.visit('http://127.0.0.1/',{
onBeforeLoad: (win) => {
cy.stub(win, 'print')
}
})
然后断言
cy.contains('print').click()
cy.window().then((win) => {
expect(win.print).to.be.calledOnce
})
我的旧按钮
<button type="button" class="btn btn-secnodary" onclick="window.print()">
Print
</button>
但是我使用了 printJS,这意味着我的按钮现在看起来像这样
<button type="button" onclick="printJS({printable: 'id_preview_modal_body', type: 'html'})" data-dismiss="modal">
Print
</button>
javascript 作为 print.min.js 加载,可以在 here 中找到.我试图对 contentwindow 进行 stub ,但到目前为止似乎还行不通。在 printJS 的代码中,打印发生在这里
frameElement.contentWindow.print()
来自 their github page , 第 63 行
我 stub 的方式给出了这个问题
cy.visit('http://127.0.0.1:8000/notices/new/',{
onBeforeLoad: (win) => {
cy.stub(win, 'printJS')
}
})
Uncaught TypeError: Cannot stub non-existent own property printJS
断言也给出了这个错误
cy.window().then((win) => {
expect(win.printJS).to.be.calledOnce
})
TypeError: [Function: init] is not a spy or a call to a spy!
我认为 [Function: init]
是从他们的 index.js
file 引用 const printJS = print.init
.但我不知道如何进一步调试这个问题。任何帮助,将不胜感激。谢谢!
最佳答案
问题是 onBeforeLoad
Hook 在 printJS 启动之前被调用,当 printJS 被导入时它调用它的 init()
函数并覆盖你在 window 中的 stub .print
.
stub 太早了
cy.visit('http://127.0.0.1:8000/notices/new/',{
onBeforeLoad: (win) => {
cy.stub(win, 'printJS')
}
})
在组件加载并启动 printJS 后 stub
const printStub
before(function(){
cy.visit('http://127.0.0.1:8000/notices/new/')
// maybe wait for loading to complete
cy.window().then(win => {
printStub = cy.stub(win, 'printJS')
})
})
it('stubs printJS', () => {
cy.contains('button', 'Print').click()
cy.window().then(win => {
expect(printStub).to.be.calledOnce
})
})
关于javascript - 如何用 Cypress stub contentwindow.print/用 Cypress 测试 printJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53505706/
考虑如下 HTML 文档 Furtheron 考虑如下 JavaScript document.addEventListener( 'DOMContentLoaded', function ( e
function getDef() { document.getElementById("defCanvas").innerHTML=document.getElementById("inv
我在 www.domain.com 上有一个页面,在 sub.domain.com 上有另一个页面。 sub.domain.com 将显示在 iframe 中的 www.domain.com 上。我试
我有一个像这样的 HTML 对象元素: Error: could not embed search results. 我还有这个 javascript 函数(添加了alert()调用以进行调试):
我正在尝试将 hotmail 安装到我的 mailto 处理程序: 这是通过网页范围内的代码完成的: navigator.registerProtocolHandler('mailto','http:
我的 javascript 有一个问题,就是根据内容调整 iFrame 的大小。我让它在其他地方工作,但对于这个例子,它抛出了一个错误。使用以下代码,body 为 null,因此无法获取 scroll
当我尝试我的代码时: Testing.html - function find() { var iframeEl = document.getElementById('love'); if ( if
我正在使用一些遗留代码,并且正在寻找一种安全的方法来处理以下情况: 我有一个显示产品选择页面的 iframe。我需要向此 iframe 传递带有查询字符串的回调函数的名称。 在 iframe 中,我从
我发现我可以通过 file:// 上的页面和远程主机上托管的 iframe 使用 iframe 的 contentWindow 属性进行跨域通信。 例如,在设备上,我在 url 文件中有一个 html
我使用以下代码动态创建一个 iframe。 var iframe_jquery = $("") .addClass("foo") .appendTo(container); // co
我正在尝试使用 React.js 制作一个富文本编辑器,我正在使用 iframe 并将 designMode 属性设置为“ON”。我想在单击按钮时将所选文本设为粗体。我想使用 execCommand(
我有一个包含多个 iFrame 的网页,例如6我希望能够在一次调用中打印其中 2 个帧,而不是获取每个帧的 contentWindow 然后调用: parent.iFrame1.focus(); pa
我想设置 iframe 的高度与其内容相匹配。但是即使将 iframe.contentWindow 放入 .load() 中,它也会返回 undefined。这是代码: $(document).rea
这是有问题的javascript代码 var tmpIframe, url; url = "http://local.custom.com:10000/simple.html"; tmpIframe
我正在使用这段代码,它源于 here和 here . $('#my_button').on('click', function (e) { var iframe = document.crea
这是我目前为止所拥有的,使用这篇文章: Make iframe automatically adjust height according to the contents without using
我正在尝试修改我访问权限有限的网站上的一些 CSS。我已被允许在服务器上创建页面,但无法修改网站上其他 PHP 生成的页面。 我正在探索将 CSS 注入(inject) iframe 中。我首先隐藏
我试图在以下代码中访问 iframe 的 contentDocument 和 contentWindow。但它们都是空的。 var iframe = document.createElemen
如何在 Chrome 中调用以下内容? iframe.contentWindow.document 最佳答案 Chrome 实际上支持 iframe.contentWindow.document,但是
我正在尝试调试 iframe 的 contentWindow,但每次我尝试在 chrome 59 上查看 contentWindow 对象时dev-tools 页面崩溃。 将 contentWindo
我是一名优秀的程序员,十分优秀!