Javascript 在同一选项卡中打开iframe内的链接

Javascript 在同一选项卡中打开iframe内的链接,javascript,testing,cypress,Javascript,Testing,Cypress,我正在尝试单击Cypress中iframe中的链接。链接在下一个选项卡中打开,测试失败 cy.get('iframe.body').wait(1000).its('0.contentDocument.body')) .find('a')。包含('Click')。Click(); 要解决此问题,请使用类似的方法在同一选项卡上打开新页面。但它不起作用: cy.get('iframe.body').wait(1000).its('0.contentDocument.body')) .find('a'

我正在尝试单击Cypress中iframe中的链接。链接在下一个选项卡中打开,测试失败

cy.get('iframe.body').wait(1000).its('0.contentDocument.body'))
.find('a')。包含('Click')。Click();
要解决此问题,请使用类似的方法在同一选项卡上打开新页面。但它不起作用:

cy.get('iframe.body').wait(1000).its('0.contentDocument.body'))
.find('a')。包含('Click'))
.invoke('removeAttr','target')。单击();
元素的外观如下所示:



target=“\u parent”
在与父项相同的页面中打开链接。 编辑:我想你不想要


我找到了两种解决方案:

  • 复制链接并访问它:
  • 使用Jquery-incorporated in cypress,然后单击:
  • 因此,对于您的情况,我将使用第二个:

    cy.get('iframe.body').wait(1000).its('0.contentDocument.body').find('a')
       .then(button => {
           cy.ui_removeATagTargetAttributeAndCick(button)
       })
    

    您的HTML表示链接在
    iframe
    之外,如果是这样,您不需要选择它

    使用
    .find('a')
    类似于(()=>…)中的
    ,但由于
    不在
    iframe
    中,如果直接以
    为目标,则删除目标的策略将起作用

    cy.contains('a', 'Click')  
      .invoke('removeAttr', 'target')
      .click();
    

    我无法更改html代码。我想我应该管理考试。我怎么能用柏树把它放在同一页上呢?很抱歉我的误解!事实上,我在iframe中没有看到任何“target”,而是在“a”中。此a当前在iframe之外。这可能是造成问题的原因吗?是的,我想是的。谢谢@Rosen Mihaylov。第一个选择对我很有效。不过,我看到访问有错误-没有重载与此调用匹配。重载1/2'(url:string,options?:Partial):可链接',出现以下错误。“JQuery”类型的参数不可分配给“string”类型的参数。重载2/2'(options:Partial&{url:string;}):可链接',出现以下错误。“JQuery”类型的参数不能分配给“Partial&{url:string;}”类型的参数。类型“JQuery”中缺少属性“url”,但类型“{url:string;}”中需要属性“url”。ts(2769)cypress.d.ts(2023,46):“url”在此处声明。visit(url:string,options?:Partial):chaineable visit(options:Partial&{url:any}):chaineable在cypress.d.ts文件中包含上述两个属性不确定是否有传递元素而不是url的选项
    Cypress.Commands.add("ui_removeATagTargetAttributeAndCick", (aTagSelector) => {
        cy.log('ui_clickAnchorTagButton')
        cy.get(aTagSelector)
            .then((aTagElement) => {
                Cypress.$(aTagElement).removeAttr("target");
                cy.get(aTagElement)
                    .click({force: true})
                    .should('not.exist')
            })
    })
    
    cy.get('iframe.body').wait(1000).its('0.contentDocument.body').find('a')
       .then(button => {
           cy.ui_removeATagTargetAttributeAndCick(button)
       })
    
    cy.contains('a', 'Click')  
      .invoke('removeAttr', 'target')
      .click();