Javascript 使用Cypress登录WordPress,不使用UI
在状态中,他们表示不应该使用UI设置状态 但是看起来WordPress在API中没有登录的可能性。 由于黑客攻击在大多数WordPress网站上都是一个问题,所以我不想添加它 如何使用Cypress登录WordPress,而不使用UIJavascript 使用Cypress登录WordPress,不使用UI,javascript,wordpress,cypress,Javascript,Wordpress,Cypress,在状态中,他们表示不应该使用UI设置状态 但是看起来WordPress在API中没有登录的可能性。 由于黑客攻击在大多数WordPress网站上都是一个问题,所以我不想添加它 如何使用Cypress登录WordPress,而不使用UI 更新2020-09-03 如果没有办法,那么我只是在寻找最好的方法。它是为了在某个地方实现某个隐藏的API登录端点吗?还是无视Brian Mann的建议,只使用UI 更新2020-10-02 首要问题 我自己一头扎进去。我想,我可以设置登录时放置的cookie
更新2020-09-03 如果没有办法,那么我只是在寻找最好的方法。它是为了在某个地方实现某个隐藏的API登录端点吗?还是无视Brian Mann的建议,只使用UI
更新2020-10-02 首要问题 我自己一头扎进去。我想,我可以设置登录时放置的cookies。那一定是最好的办法。所以我们的目标是做这样的事情:
请注意,当您阅读有关Cypress的文章时,这可能接近于许多地方提到的反模式。所以,如果你想和布莱恩·曼成为朋友,可能就不要这样做。但我的意思是。。。谁需要这个家伙 我不相信没有插件和/或自定义代码就可以通过API登录-请参阅wordpress/stackexchange上的此线程 然而,我认为如果您使用管理您的插件,您可以通过将所需插件添加为require-dev来缓解您的漏洞利用问题 如果您不使用composer,请查看类似于该项目的内容,它为Wordpress提供了更现代的体系结构
一旦将auth插件添加为开发人员依赖项,您就应该能够在本地/登台上通过Cypress进行无头身份验证,同时确保生产的安全性。以下是您的操作方法。这花了我几个小时,但这对我来说很有效,而且经过了彻底的测试。我确实交换了下面的变量(显然) 我做了一系列命令,以便在测试之间快速登录/注销
警告 请记住将
adminUserLoginCookiesFromCypress.json
添加到您的.gitignore
——并且不要将其上载到您的服务器。如果这被错误的人掌握,那么某人将能够以你的用户身份登录(通过将cookies添加到他们自己的浏览器中)
环境 此内容位于项目根目录中的
cypress.json
{
"env": {
"baseUrl": "https://s1.demo.opensourcecms.com/wordpress",
"dashboardUrl": "https://s1.demo.opensourcecms.com/wordpress/wp-admin",
"domain": "s1.demo.opensourcecms.com/wordpress",
"users": {
"admin": {
"username": "opensourcecms",
"email": "test@example.org",
"pw": "opensourcecms"
}
}
},
}
Cypress.Commands.add( "getWordPressCookies", () => {
cy.getCookies()
.then( (cookies) => {
cy.writeFile( 'adminUserLoginCookiesFromCypress.json', cookies );
});
});
命令
清除cookies 由于某种原因,我不能(也不能)让
cy.clearCookies()
工作。
如果我运行一个登录到WP的测试,那么当测试第二次运行时,它仍然会被记录。即使我运行cy.clearCookies()
第一件事(?)
此手动/特定clearCookie命令适用于我:
Cypress.Commands.add( "clearWordPressCookies", () => {
cy.clearCookie( 'wordpress_a8b94154380982c3184a469b8aa525c6' );
cy.clearCookie( 'wordpress_a8b94154380982c3184a469b8aa525c6' );
cy.clearCookie( 'wordpress_logged_in_a8b94154380982c3184a469b8aa525c6' );
cy.clearCookie( 'wordpress_test_cookie' );
});
记住找到站点的实际cookie名称并替换哈希
获取cookies 将cookies保存到文件(在项目根目录中)
设置cookies 设置保存文件中的Cookie(从Get Cookie函数)
手动登录 这必须在第一次完成,才能让WordPress生成cookies
Cypress.Commands.add( "manualWordPressLogin", () => {
cy.clearWordPressCookies();
cy.visit( Cypress.env('dashboardUrl') );
cy.get('#user_login').wait(200).type( Cypress.env('users').admin.username , { force: true } );
cy.get('#user_pass').wait(200).type( Cypress.env('users').admin.pw, { force: true } );
cy.get('#wp-submit').click();
cy.get('h1').contains( 'Dashboard' );
});
示例用法
这无疑让我走上了正确的道路!我实际上花了好几个小时(真的是好几天)在想什么时候设置cookies。当柏树被打扰的时候。我与您的唯一不同之处在于登录命令的最后一步是保存cookies,然后运行。。否则,谢谢你,先生:)
Cypress.Commands.add( "manualWordPressLogin", () => {
cy.clearWordPressCookies();
cy.visit( Cypress.env('dashboardUrl') );
cy.get('#user_login').wait(200).type( Cypress.env('users').admin.username , { force: true } );
cy.get('#user_pass').wait(200).type( Cypress.env('users').admin.pw, { force: true } );
cy.get('#wp-submit').click();
cy.get('h1').contains( 'Dashboard' );
});
context( 'Login, set and prep cookies' , function () {
it( 'Ensure no one is logged in', function() {
cy.clearWordPressCookies();
cy.visit( Cypress.env('dashboardUrl') );
cy.location('pathname').should('eq', '/wp-login.php' ); // Not logged in
});
it( 'Logs in a admin user', function(){
cy.manualWordPressLogin();
cy.getWordPressCookies();
cy.visit( Cypress.env('dashboardUrl') );
cy.location('pathname').should( 'match', /^\/wp-admin/ );
});
it( 'logs out the user - and logs back in using setting wp-cookies', function(){
cy.clearWordPressCookies();
cy.visit( Cypress.env('dashboardUrl') );
cy.location('pathname').should( 'match', /^\/wp-login\.php/ ); // Not logged in
cy.setWordPressCookies();
cy.visit( Cypress.env('dashboardUrl') );
cy.location('pathname').should( 'match', /^\/wp-admin/ ); // Is logged in
});
});