【发布时间】:2020-08-15 07:32:11
【问题描述】:
我是赛普拉斯的新手。我的应用程序作为“路由系统”手动更改window.location.hash。
在某些时候,我单击了一个更改哈希的按钮,因此应该在测试期间更改页面。我可以在执行过程中看到一个“新 url”条目,但是如何让 cypress 访问该 url?
简而言之,问题是什么:您可以看到我输入了密码,然后输入了{enter}。运行测试可以看到地址栏的hash变化,但是页面并没有随着hash变化而变化。
这是测试代码
context("Workflow", () => {
it("login", () => {
cy.visit("http://localhost:3000/src/#login")
cy.get("#username").type("demo").should("have.value", "demouser")
cy.get("#password").type("demo{enter}").should("have.value", "demo") // this should redirect to "/#home"
//cy.wait(10000)
cy.get(".subtitle").should("have.value", "Welcome") //this line fails as ".subtitle" is an element of "/#home"
})
})
编辑:经过无数次失败的尝试,我想出了一个部分有效、笨拙且笨拙的解决方案。我认为我不需要使用reload() 来解决这个问题(必须有更好的解决方案..),但要使其正常工作,我必须等待所有远程请求完成(否则reload() 会取消它们)。我说部分工作,因为如果我尝试先访问#login,然后按照#home 中的重定向,然后将页面更改为#browser,您可以从代码中的 cmets 看到,最后一个不起作用(我可以看到哈希更改为#browser,但页面仍然是#home)。
import 'cypress-wait-until';
let i = 0;
context("Workflow", () => {
it("login", () => {
cy.server( {
onRequest: () => {
i++;
},
onResponse: () => {
i--;
}
});
cy.visit("http://localhost:3000/src/#login")
cy.get("#username").type("demouser").should("have.value", "demouser")
cy.get("#password").type("demouser").should("have.value", "demouser")
cy.get("form#formLogin").submit()
cy.waitUntil(() => i > 0)
cy.waitUntil(() => i === 0)
cy.reload(); // it correctly change the hash AND the page to #home!
cy.url().should("include", "#home")
cy.get(".version").contains( "v2.0.0-beta") // it works!!
cy.get("a[data-id=browser]").click({force: true}) // it correctly changes the hash to #browser
cy.waitUntil(() => i > 0)
cy.waitUntil(() => i === 0)
cy.reload();
// the hash in the address bar is #browser, but the web page is #home
})
})
【问题讨论】:
-
你试过
cy.visit()吗? -
cy.visit()将 url 作为参数。我不需要那个。我只需要访问菜单按钮指向的页面。 -
所以你点击了一个按钮,它会手动更改锚点 AKA
window.location.hash。当您手动点击网页中的按钮时,您是否重定向到锚点? -
当然可以,网站本身也可以正常工作。整个问题是当我在 cypress 中运行它时,我使用
cy.find("#mybutton").click()单击一个按钮,而 cypress 根本不会更改页面。 -
你说你点击了一个按钮,但上面的日志中没有显示。可能是因为
cy.find("#mybutton")是无效语法,请参阅here。显示测试代码会更有帮助。
标签: javascript cypress e2e-testing lit-element