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阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,727评论 1 92
  • python自动化测试中寻找元素并进行操作,如果在元素好找的情况下,相信大家都可以较熟练地编写用例脚本了,但光进行...
    燕京博士阅读 458评论 0 3
  • Selenium2Library关键字(1)对Selenium2Library关键字的整理和翻译。英文不好,仅供参...
    faraway_com阅读 3,665评论 0 4
  • 下午去医院看望爸爸,走进病房,爸爸病床上被子整齐叠放着,爸爸妈妈都不在,难道去做检查了? “您好,请问我爸爸去哪儿...
    紫烟_3cfc阅读 273评论 1 1
  • 今天又是一个下雨天,吃完早点我冒着雨到了学校。上完了语文和数学课后,我最喜欢的体育课因为下雨的原因只能在教室里上了...
    荆玉淋阅读 141评论 0 0