如何使用迭代点击柏树中的每种付款方式?
How to click on each payment method in cypress using iteration?
我的要求是点击每一种支付方式(pay-safe、visa、bit-pay 等)
然后通过比较 URL.
使用断言方法进行验证
问题:无法点击元素。我在变量中得到空值。尝试使用 val() 以及 html() 方法。
我试过下面的代码。
//cy.get('.real-money--providers-list') = allPaymentMethods
depositFiat.allPaymentMethods().find('[src*="providers/logo"]').each(($element, index, $list) => {
var namePaymentProvider = $element.find('[alt*="safe"]').text()
cy.log(namePaymentProvider)
cy.wait(1000)
if(namePaymentProvider.includes('class')){
$element.find('.provider-content--choice').click()
//cy.get('.provider-content').invoke('removeAttr','src').click()
//depositFiat.secureCheckout().click()
//cy.back()
}
})
由于 cypress 无法处理 child windows 我尝试使用 invoke 方法但没有成功。
在此处查找 HTML
<div class="provider-img"><img alt="safecharge_paysafecard" class="style__Logo-a3ugi5-2 fAwRoV visible" src="https://static.xyz.com/1234123463/img/providers/logo_safecharge_paysafecard.svg"></div>
根据您的 HTML fiddle,我可以看到对于每个支付提供商,您都可以使用 css 选择器 img[class*="style__Logo"]
对于一种付款方式,您可以使用:
cy.get('img[class*="style__Logo"]').eq(0).invoke('attr', 'src').should('contain', 'https: //static.xyz.com/')
您正在寻找一张图片,然后试图点击它。
点击事件很可能发生在按钮上
尝试点击按钮:
cy.get('.provider-content').each($element => {
cy.wrap($element).click()
// Assert something here
})
如果点击操作打开了一个新的 tab/window,并且您想断言它移动了您所做的这个新的 link,那么 Cypress 不直接支持这一点。
相反,您将获得 url 应该 通过点击打开并验证。
或者
存根浏览器 window 以便新选项卡在您当前所在的同一选项卡中打开。
您可以使用 Recursion and Jquery .removeAttr
:
cy.get('[src*="providers/logo"]') //You need to make sure here is the correct selector that covers all methods here
.then(methods => {
checkPaymentMethod
function checkPaymentMethod(methodNumber = 0) {
if(methodNumber < methods.length) {
Cypress.$(methods[methodNumber]).removeAttr("target");
cy.get(methods[methodNumber])
.click()
.should('not.exist')
cy.url().should('eq', 'targetUrl')
cy.visit('yourPageUrl')
cy.url().should('eq', 'yourPageUrl')
methodNumber ++
checkPaymentMethod(methodNumber)
}
}
})
我的要求是点击每一种支付方式(pay-safe、visa、bit-pay 等) 然后通过比较 URL.
使用断言方法进行验证问题:无法点击元素。我在变量中得到空值。尝试使用 val() 以及 html() 方法。
我试过下面的代码。
//cy.get('.real-money--providers-list') = allPaymentMethods
depositFiat.allPaymentMethods().find('[src*="providers/logo"]').each(($element, index, $list) => {
var namePaymentProvider = $element.find('[alt*="safe"]').text()
cy.log(namePaymentProvider)
cy.wait(1000)
if(namePaymentProvider.includes('class')){
$element.find('.provider-content--choice').click()
//cy.get('.provider-content').invoke('removeAttr','src').click()
//depositFiat.secureCheckout().click()
//cy.back()
}
})
由于 cypress 无法处理 child windows 我尝试使用 invoke 方法但没有成功。
在此处查找 HTML
<div class="provider-img"><img alt="safecharge_paysafecard" class="style__Logo-a3ugi5-2 fAwRoV visible" src="https://static.xyz.com/1234123463/img/providers/logo_safecharge_paysafecard.svg"></div>
根据您的 HTML fiddle,我可以看到对于每个支付提供商,您都可以使用 css 选择器 img[class*="style__Logo"]
对于一种付款方式,您可以使用:
cy.get('img[class*="style__Logo"]').eq(0).invoke('attr', 'src').should('contain', 'https: //static.xyz.com/')
您正在寻找一张图片,然后试图点击它。 点击事件很可能发生在按钮上
尝试点击按钮:
cy.get('.provider-content').each($element => {
cy.wrap($element).click()
// Assert something here
})
如果点击操作打开了一个新的 tab/window,并且您想断言它移动了您所做的这个新的 link,那么 Cypress 不直接支持这一点。 相反,您将获得 url 应该 通过点击打开并验证。
或者
存根浏览器 window 以便新选项卡在您当前所在的同一选项卡中打开。
您可以使用 Recursion and Jquery .removeAttr
:
cy.get('[src*="providers/logo"]') //You need to make sure here is the correct selector that covers all methods here
.then(methods => {
checkPaymentMethod
function checkPaymentMethod(methodNumber = 0) {
if(methodNumber < methods.length) {
Cypress.$(methods[methodNumber]).removeAttr("target");
cy.get(methods[methodNumber])
.click()
.should('not.exist')
cy.url().should('eq', 'targetUrl')
cy.visit('yourPageUrl')
cy.url().should('eq', 'yourPageUrl')
methodNumber ++
checkPaymentMethod(methodNumber)
}
}
})