1.0.2 • Published 6 years ago

webdriverio-explicit-waits v1.0.2

Weekly downloads
17
License
MIT
Repository
github
Last release
6 years ago

webdriverio-explicit-waits

Simple library that allows to wait for elements in webdriverio, not just string locators

const { waitFor, ExpectedConditions } = require('webdriverio-explicit-waits')
const EC = ExpectedConditions

waitFor(EC.visibilityOf(()=> $('div.someClass')), 2000)

Originaly, webdriverIO does not support lazy elements pattern, so in PageObjects you need to write like this:

class SomePageObject {
    get header() {
        return $('header')
    }
}

But this brings a problems when you want to wait for some element conditions:

let somepage = new SomePageObject()
browser.waitForVisible(somepage.header) // ERROR! WebdriverIO accepts only strings in explicit wait methods!

So here is this lib comes:

waitFor(EC.visibilityOf(somepage.header), 2000)

Another problem, even if you don't use getters, and store all your locators in strings, sometimes you have containers, and you want to search your elements inside them:

class SearchResults {
    container = 'div.container.searchresults'
    results = 'ul>li.result'
    title = '.title'
    description = '.description'
}

So if you want to wait for visible title in result number 5 (just example):

let searchRes = new SearchResults()

waitFor(EC.visibilityOf(()=> {
    return $(searchRes.container).$$(searchRes.results)[5].$(searchRes.title)
    }), 2000)

And even easier with getters:

let searchRes = new SearchResults()

waitFor(EC.visibilityOf(()=> searchRes.results(5).title), 2000, 'Result number 5 should have visible title')
  • EC.visibilityOf
  • EC.invisibilityOf
  • EC.textToBe // check element contains text
  • EC.not // flip boolean result of condition

TODO: List of methods and extend with more conditions