codeceptjs學習筆記 - Actions用法

本文章基于codeceptjs@1.0.1

這篇文章會介紹一些與頁面交互最常用的actions及其用法。

定位元素

和其他框架定位元素一樣,CSS/Xpath/ID/Name/Text等都是常用的方法。對于webdriverio這個helper來說,基本每一個方法都會接受css和xpath。

I.seeElement('.user'); // element with CSS class user
I.seeElement('//button[contains(., "press me")]'); // button

默認情況下,因為codeceptjs會去猜locator的類型,所以你不用特別指明。我們也可以通過strict locator來告訴codeceptjs locator的類型。

strict locator 就是一組鍵值對,key表示的是locator的類型,value表示的是locator的值。

// locate from element by css
I.seeElement({css: 'div.user'});
// locate form element by xpath
I.seeElement({xpath: '//div[@class=user]'});
// locate form element by name
I.seeElement({name: 'password'});
// locate element by text
I.seeElement({text: 'press me'});
// locate element by id
I.seeElement({id: 'users'});

點擊元素

點擊link或是button算是每個頁面都會有的基本操作了。默認情況下,codeceptjs會采用“完全匹配”的方式通過button text來查找元素并且點擊元素。

// search for link or button
I.click('Login');

如果沒有找到“完全匹配”的,會采用“部分匹配”的方式進行查找。對于可以點擊的圖片,會查找圖片對應的alt屬性。i.e. ![imagetext](/i/eg_tulip.jpg) “imagetext”就是我們可以查找的文本。

為了縮小的查找的范圍,click()方法的第二個參數可以接受一個locator來限定查找的區域。

I.click('Login', '.nav'); // search only in .nav
I.click('Login', {css: 'footer'}); // search only in footer

strict locator和css id xpath都是可以用于click()中來縮小范圍。不過這樣的話,元素定位的范圍就不僅限于link和button了。任何被找到的元素都會被點擊。

// click element by CSS
I.click('#signup');
// click element located by name inside a form
I.click({name: 'submit'}, '#user>form');

填充文本框

填充文本框使用fillField()方法,支持name,lable, Xpath和CSS等locator類型。

// we are using label to match user_name field
I.fillField('Name', 'Miles');
// we can use input name
I.fillField('user[email]','miles@davis.com');
// we are using CSS
I.fillField('#user_name', 'Miles');
I.fillField('#user_email','miles@davis.com');

選取下拉菜單

下拉菜單選值使用selectOption()方法,支持name,lable, Xpath和CSS等locator類型。

// select element by label, choose option by text
I.selectOption('Gender','Male');
// select element by label, option by value
I.selectOption('#user_gender','m');

驗證

為了驗證我們是否到了期望的頁面或是完成了期望的行為,我們需要方法來判斷頁面上是否有我們需要的元素顯示出來。I.see*()I.dontSee*()方法可以驗證當前用戶看到的頁面上元素是否存在。

最常用的是I.see()I.dontSee().下面的列子可以驗證頁面上的文本是否存在。和其他方法類似,第二個參數可以縮小查找范圍。

// Just a visible text on a page
I.see('Hello');
// text inside .msg element
I.see('Hello', '.msg');
// opposite
I.dontSee('Bye');

I.seeElement()I.dontSeeElement()可以判斷元素的出現與否

I.seeElement('.notice');
I.dontSeeElement('.error');

除此之外,頁面的URL,title和文本框里面的值都是可以驗證的。更多的方法請參考這里。

I.seeInCurrentUrl('/user/miles');
I.seeInField('user[name]', 'Miles');
I.seeInTitle('My Website');

抓取元素

某些時候你需要從頁面獲取一些數據來做驗證或是下一個測試步驟的輸入,比如頁面顯示出來的文本。所有已grab*開頭的方法可以滿足這個需求。

I.fillField('email', 'miles@davis.com')
I.click('Generate Password');
let password = yield I.grabTextFrom('#password');
I.click('Login');
I.fillField('email', 'miles@davis.com');
I.fillField('password', password);
I.click('Log in!');

上面的grabTextFrom()方法用于取出元素的文本。所有的grab*()方法都要用于生成器里面。

Scenario('use page title', function*(I) {
  // ...
  var password = yield I.grabTextFrom('#password');
  I.fillField('password', password);
});

等待wait

在日常造成UI測試失敗的原因中,render太慢造成元素在頁面顯示不出來然后操作無法完成十分常見。于是在各大的測試框架中wait*()相關方法的出現就用來解決這個問題。

I.waitForElement('#agree_button', 30); // secs
// clicks a button only when it is visible
I.click('#agree_button');

SmartWait

Selenium Webdriver提供了兩種不同類型的waits:

  • implicit wait -> 讓webdriver在當定位元素的時候,如果元素沒有立即出現,需要等待一段時間。這個作用域是DOM全局的。
  • explicit wait -> 讓webdriver在繼續執行操作之前,等待某個特定的情況發生。比如在點擊某一個link之前,需要等待link加載完成

codeceptjs的SmartWait就是implicit wait的實現。如果需要定位的元素還沒有出現,codeceptjs會在失敗之前等待一段時間。

SmartWait是配置在Helper里面的,比如下面的smartWait: 5000

"helpers": {
  "WebDriverIO": {
    "url": "http://simple-form-bootstrap.plataformatec.com.br",
    "browser": "chrome",
    "smartWait": 5000
  }
},

注意到SmartWait只在strict locator和標識了type的locator的方法中起作用

I.click('Login'); // DISABLED, not a locator
I.fillField('user', 'davert'); // DISABLED, not a specific locator
I.fillField({name: 'password'}, '123456'); // ENABLED, strict locator
I.click('#login'); // ENABLED, locator is CSS ID
I.see('Hello, Davert'); // DISABLED, Not a locator
I.seeElement('#userbar'); // ENABLED
I.dontSeeElement('#login'); // DISABLED, can't wait for element to hide
I.seeNumberOfElements('button.link', 5); // DISABLED, can wait only for one element

IFrames

within()方法可以用于IFrame的定位,在within()內部的方法就會在IFrame中執行。

within({frame: "#editor"}, () => {
  I.see('Page');
});
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,533評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,055評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,365評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,561評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,346評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,889評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,978評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,118評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,637評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,558評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,739評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,246評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,980評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,619評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,347評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,702評論 2 370

推薦閱讀更多精彩內容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,774評論 1 92
  • python自動化測試中尋找元素并進行操作,如果在元素好找的情況下,相信大家都可以較熟練地編寫用例腳本了,但光進行...
    燕京博士閱讀 485評論 0 3
  • Selenium2Library關鍵字(1)對Selenium2Library關鍵字的整理和翻譯。英文不好,僅供參...
    faraway_com閱讀 3,707評論 0 4
  • 下午去醫院看望爸爸,走進病房,爸爸病床上被子整齊疊放著,爸爸媽媽都不在,難道去做檢查了? “您好,請問我爸爸去哪兒...
    紫煙_3cfc閱讀 286評論 1 1
  • 今天又是一個下雨天,吃完早點我冒著雨到了學校。上完了語文和數學課后,我最喜歡的體育課因為下雨的原因只能在教室里上了...
    荊玉淋閱讀 152評論 0 0