单击按钮后尝试从 DOM 中的标签中提取动态 URL

And*_*ndy 2 cypress

在此输入图像描述

<a id="ctl00_MainContent_UndoButton" class="a-button a-button--cancel 
dd-data-link" 
href="javascript:__doPostBack('ctl00$MainContent$UndoButton','')"> 
Undo </a>
Run Code Online (Sandbox Code Playgroud)

当我单击上面的按钮时,会打开一个新的动态 url 弹出窗口,然后注入以下脚本来打开页面。

在此输入图像描述

//<![CDATA[
ToggleTempChanged();TogglePermaChanged()
;window.open('**/products/Car/EndTempAdjustment.aspxenc
=Y/qlHvbv+Gt2rmvC4GL1GzEO87O1bd8H91aPhk96iKLRMC+yw
MY3gWzR7jpKnJVPaIz+srgg 
NtdnpsEudpo4lEa7ccLMPe2PXXQlxREtp8nsWkPq
7qKCBnVCt7n0m7f953bwfRYXrngveDlNLAqC 
wjpPP6eIp6Sz+oEtMBkjUEHJd4jztk2IEJcsHskdXH6H**');

var Page_ValidationActive = false;
if (typeof(ValidatorOnLoad) == "function") {
    ValidatorOnLoad();
}

function ValidatorOnSubmit() {
    if (Page_ValidationActive) {
        return ValidatorCommonOnSubmit();
    }
    else {
        return true;
    }
}
    
document.getElementById('ctl00_RequiredFieldValidator1').dispose = 
function() {
    Array.remove(Page_Validators, 
document.getElementById('ctl00_RequiredFieldValidator1'));
}

document.getElementById('ctl00_RegularExpressionValidator1').dispose = 
function() {
    Array.remove(Page_Validators, 
document.getElementById('ctl00_RegularExpressionValidator1'));
}
//]]>
Run Code Online (Sandbox Code Playgroud)

我已尝试了所有方法来尝试存根、删除新窗口的属性等,以使我能够在此页面上进行测试,但没有成功,并检查了有关打开新窗口的动态 url 的其他答案。有人知道如何从上面注入的代码中提取动态 URL 吗?我的计划是 cy.visit 到提取的动态 URL。

小智 5

假设CDATA通过 API 调用进入页面,您可以通过查看浏览器的“开发人员工具/网络”选项卡找到该调用的 URL。

添加一个拦截来存根调用(以便window.open()删除该部分),例如

cy.intercpet(url-dynamic-code, '//<![CDATA[//]]>`).as('intercept-undo')
cy.contains('Undo').click()
cy.wait('@intercept-undo')   // confirms click happened
Run Code Online (Sandbox Code Playgroud)

然后您可以cy.visit('**/products/Car/EndTempAdjustment.aspxenc =Y/qlHv...')测试该弹出窗口,但也许这不现实,因为看起来弹出窗口需要与主窗口交互。