我有一個span元素,它的值是2,我想檢查它的值是否大于0,但在網上查詢并實施了所有方法后,它沒有作業......
下面是我記錄$span時的控制臺
我知道Cypress是異步作業的,所以我使用.then()來獲取元素的文本。我怎樣才能得到2的值并做后續的if-else呢?
HTML
<div>
<span class="badge ml-1 badge-primary"/span>> 2</span>
</div>
cy.get(" .badge. ml-1.badge-primary").then(($span)=> {
if($span.text().includes(0)){
doFunction1()
} else {
cy.get(xxxxx)
}
uj5u.com熱心網友回復:
通過鏈式轉換方法,從element -> text -> number
cy.get(".badge.ml-1.badge-primary"/span>)
.invoke('text') // to text.
.then(text => text) // to number
.then(value => {
if(value > 0) {
doFunction1()
} else {
cy.get(xxxxx)
}
})
等待值2
cy.get(".badge.ml-1.badge-primary"/span>)
.invoke('text') // to text.
.then(text => text) // to number
.should('eq', 2) //等待值2。
.then(() => {
doFunction1() // now doFunction.
})
uj5u.com熱心網友回復:
你所要求的是檢查span的內容是否大于0,所以它需要比使用includes更多的方法。例如,你可以讀取一個變數的值并檢查它是否大于0:
cy.get(" .badge. ml-1.badge-primary").then(($span)=> {
const value = $span.text(); // now you know what the value is.
if(value > 0) { //實際檢查 if > 0. 小心,這里有隱式反轉!閱讀下文。
doFunction1()
} else {
cy.get(xxxxx)
}
然而,value變數是一個字串。我的代碼是有效的,因為JS會自動將字串轉換成數字。根據你的使用情況,你可能想確保它是一個有效的數字,而不是其他一些不能被轉換為數字的字串(如 "2s")。
例如,如果該值是 "2s",那么value > 0檢查將是錯誤的,這可能會導致你的代碼中出現錯誤。
cy.get(" .badge. ml-1.badge-primary").then(($span)=> {
const value = Number.parseInt($span. text(); // now you know what the value is.
if(!Number.isNaN(value) & & value > 0) { //value現在是數字型別,但它可能是NaN! (是的,NaN也是一個數字)。
doFunction1()
} else {
cy.get(xxxxx)
}
uj5u.com熱心網友回復:
首先要確保你使用的選擇器是唯一的,這樣就不會獲取一個非預期的值。其次,你可以用一個自定義的超時來等待,以防你的網頁需要一些時間來填充值,然后再應用你的if-esle條件。現在,should命令將重新嘗試7秒,以檢查該元素的內部文本值是否為2,而不是4秒(Cypress默認超時)。
cy.get(".badge.ml-1.badge-primary"/span>, { timeout: 7000 }).should("have.text"/span>, "2"/span>)
cy.get(".badge.ml-1.badge-primary")
.invoke(text)
.then((num) => {
if ( num > 0) {
doFunction1()
} else {
cy.get(xxxxx)
}
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/318653.html
標籤:
