我是Cypress的新手,我想用一個已經存在的網頁來實作一些簡單的測驗。我對結果有點困惑,因為我呼叫了兩次invoke():第一次是檢查初始值(0%),第二次是設定一個新的值并檢查變化,但是沒有成功,它告訴我找不到我所搜索的屬性。代碼如下:
describe('My first test', function(){
beforeEach(() => {
cy.visit("https://www.wikiwand.com/en/IPv4")
})
it('test1', function() {
const opt = cy.get("#main_menu > li").eq(3).click()
const sty = opt.get(".noUi-origin").first()
sty.invoke("attr", "style").should("include", "left: 0%;" )
sty.invoke("attr", "style", "left: 100%;").should("have.attr", "style", "left: 100%;")
})
})
我只是簡單地把選單欄上的個性化按鈕,我想把數值改為serif或sans。兩個invoke()的順序有問題?這個錯誤是:
*Timed out retrying after 4000ms: cy.invoke() errored because the property: attr does not exist on your subject.
cy.invoke() 等待指定的屬性attr存在,但它從未存在。
如果你不期望屬性attr存在,那么添加一個斷言,如。
cy.wrap({ foo: 'bar' }).its('quux').should('not.exist')*。
on
sty.invoke("attr", "style", "left: 100%;").should("have.attr", "style", "left: 100%;")
有人對此有什么想法嗎?
uj5u.com熱心網友回復:
Cypress命令在一個 "鏈 "中運行,當前的 "主題 "被從一個命令傳遞到下一個。
盡管你認為你在const sty = ...
中保存了對元素的參考,實際上你是在保存一個指向內部Cypress主題的指標。
當你做sty.invoke("attr", "style")
時,你現在已經把主題改變為那個樣式屬性,而不是元素。
所以當你再次嘗試sty.invoke("attr", "style")
時,sty
不再有attr
方法,因此出現錯誤。
更常規的方法是不存盤命令結果。
只要重新查詢即可
const opt = cy.get("#main_menu > li"/span>) 。 eq(3).click()
cy.get(".noUi-origin"/span>).first()
.invoke("attr"/span>, "style"/span>)
.should("include", "left: 0%;")
cy.get(".noUi-origin"/span>).first()
.invoke("attr", "style", "left: 100; ")
.should("have.attr", "style", "left: 100;")
或者使用一個不改變主題的斷言
const opt = cy.get("#main_menu > li"/span>) 。 eq(3).click()
cy.get(".noUi-origin"/span>).first()
.should("have.css"/span>, "left"/span>, "0px"/span>) //保持同一主題。
.invoke("attr", "style", "left: 100; ")
.should("have.attr", "style", "left: 100;")
uj5u.com熱心網友回復:
所以字體滑塊當它是Serif時,風格是left: 0%;
,當你把滑塊拖到Sans時,風格是left: 100%;
。因此,你的測驗應該是這樣的:
cy.visit("https://www.wikiwand.com/en/IPv4"/span>);
cy.get("#main_menu > li")。 eq(3).click()。
cy.get(".noUi-origin"/span>)
.first()
.invoke("attr"/span>, "style"/span>)
.should("include", "left: 0%;") 。
cy.get('[ng-click="$root.fontStyleHandler(1, true)"] ')。 click(); /Drags the slider from Serif to Sans。
cy.get(".noUi-origin"/span>)
.first()
.invoke("attr"/span>, "style"/span>)
.should("include", "left: 100%;") 。
或者,如果你不想使用滑塊,那么你必須首先洗掉樣式屬性,然后添加樣式屬性的值left: 100%;
,在這種情況下,你的測驗應該是:
cy.visit("https://www.wikiwand.com/en/IPv4"/span>)
cy.get("#main_menu > li") 。 eq(3).click()
cy.get(".noUi-origin"/span>)
.first()
.invoke("attr"/span>, "style"/span>)
.should("include", "left: 0%;")
cy.get(".noUi-origin"/span>).first()。 invoke("removeAttr"/span>, "style")
cy.get(".noUi-origin"/span>).first()。 invoke("attr", "style", "left: 100; ")
cy.get(".noUi-origin"/span>)
.first()
.invoke("attr"/span>, "style"/span>)
.should("include", "left: 100%;")
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/318666.html
標籤: