All Versions
363
Latest Version
Avg Release Cycle
11 days
Latest Release
525 days ago

Changelog History
Page 37

  • v5.0.2 Changes

    December 22, 2018

    📚 :memo: Documentation

    Committers: 2

  • v5.0.1 Changes

    December 21, 2018

    :bug: Bug Fix

    • wdio-runner

    📚 :memo: Documentation

    Committers: 2

  • v5.0.0 Changes

    December 20, 2018

    This version comes with a variety of technical changes that might affect the functionality of 3rd party WebdriverIO packages from the community. If such a package causes problems after the update, please raise an issue in the repository of that package and not in this repository. You can find a list of officially maintained packages here.

    :boom: Breaking Change

    • 📦 moved wdio cli command from webdriverio package to @wdio/cli
    • 💻 commands are scoped to browser and element - no selector property on commands anymore js // v4 browser.click('#myElem') js // v5 and upwards const elem = $('#myElem') elem.click()
    • no command chaining anymore (in standalone and wdio mode) js // v4 (standalone/async mode) browser .url('https://duckduckgo.com/') .setValue('#search_form_input_homepage', 'WebdriverIO') // ... js // v5 (standalone/async mode) await browser.url('https://duckduckgo.com/') const elem = await browser.$('#search_form_input_homepage') await elem.click() await elem.setValue('WebdriverIO')
    • every protocol command returns a value property instead of raw driver response js // v4 const result = browser.execute(() => 1 + 1) console.log(result) // outputs: // { sessionId: '02aee149a1a421b81598ff2a3b90e33d', // value: 2, // _status: 0 } js // v5 const result = browser.execute(() => 1 + 1) console.log(result) // outputs: 2
    • the remote and multiremote methods to initiate a driver instance now also start the driver session and therefore return a promise (no init command anymore) js // v4 import { remote } from 'webdriverio' const driver = remote({ ... }) driver.init().url('https://webdriver.io').end() js // v5 import { remote } from 'webdriverio' const driver = await remote({ ... }) await driver.url('https://webdriver.io') await driver.deleteSession()
    • command changes: over the years WebdriverIO added more and more commands for different automation protocols without applying a pattern to it which resulted in having a bunch of duplication and inconsistent naming, even though the list looks exhausting, most of the commands that have changed were used internally
      • renamed commands:
        • isVisibleisDisplayed
        • isVisibleWithinViewportisDisplayedInViewport
        • waitForVisiblewaitForDisplayed
        • clearElementclearValue
        • moveToObjectmoveTo (element scope only)
        • setCookie, getCookie, deleteCookiesetCookies, getCookies, deleteCookies
        • getElementSizegetSize
        • source, getSourcegetPageSource
        • titlegetTitle
        • actionsperformActions (WebDriver protocol only)
        • alertAcceptacceptAlert
        • alertDismissdismissAlert
        • alertTextgetAlertText, sendAlertText
        • applicationCacheStatusgetApplicationCacheStatus (JsonWireProtocol only)
        • cookiegetAllCookies, addCookie, deleteCookie
        • getCssPropertygetCSSProperty
        • elementfindElement
        • elementsfindElements
        • elementActivegetActiveElement
        • elementIdAttributegetElementAttribute
        • elementIdClearelementClear
        • elementIdClickelementClick
        • elementIdCssPropertygetElementCSSValue
        • elementIdDisplayedisElementDisplayed
        • elementIdElementfindElementFromElement
        • elementIdElementsfindElementsFromElement
        • elementIdEnabledisElementEnabled
        • elementIdLocationgetElementLocation
        • elementIdLocationInViewgetElementLocationInView (JsonWireProtocol only)
        • elementIdNamegetElementTagName
        • elementIdPropertygetElementProperty
        • elementIdRectgetElementRect
        • elementIdScreenshottakeElementScreenshot
        • elementIdSelectedisElementSelected
        • elementIdSizegetElementSize (JsonWireProtocol only)
        • elementIdTextgetElementText
        • elementIdValueelementSendKeys
        • frameswitchToFrame
        • frameParentswitchToParentFrame
        • timeoutsAsyncScript, timeoutsImplicitWaitsetAsyncTimeout, setImplicitTimeout (JsonWireProtocol only)
        • getLocationInViewgetElementLocationInView (JsonWireProtocol only)
        • imeActivateactivateIME (JsonWireProtocol only)
        • imeActivatedisIMEActivated (JsonWireProtocol only)
        • imeActiveEnginegetActiveEngine (JsonWireProtocol only)
        • imeAvailableEnginesgetAvailableEngines (JsonWireProtocol only)
        • imeDeactivateddeactivateIME (JsonWireProtocol only)
        • localStoragegetLocalStorage, setLocalStorage, clearLocalStorage, getLocalStorageItem, deleteLocalStorageItem (JsonWireProtocol only)
        • localStorageSizegetLocalStorageSize (JsonWireProtocol only)
        • sessionStoragegetSessionStorage, setSessionStorage, clearSessionStorage, getSessionStorageItem, deleteSessionStorageItem (JsonWireProtocol only)
        • sessionStorageSizegetSessionStorageSize (JsonWireProtocol only)
        • locationgetElementLocation
        • loggetLogs (JsonWireProtocol only)
        • logTypesgetLogTypes (JsonWireProtocol only)
        • screenshottakeScreenshot
        • sessiongetSession, deleteSession (JsonWireProtocol only)
        • sessionsgetSessions
        • submitelementSubmit
        • timeoutsgetTimeouts, setTimeouts
        • window, switchToWindowswitchWindow
        • windowHandlecloseWindow, getWindowHandle
        • windowHandlesgetWindowHandles
        • windowHandleFullscreenfullscreenWindow
        • windowHandleMaximizemaximizeWindow
        • windowHandlePositionsetWindowPosition, getWindowPosition (JsonWireProtocol only), setWindowRect, getWindowRect (WebDriver protocol only)
        • windowHandleSizesetWindowSize, getWindowSize (JsonWireProtocol only), setWindowRect, getWindowRect (WebDriver protocol only)
        • hasFocusisFocused
        • enddeleteSession
        • reloadreloadSession
        • scrollscrollIntoView
        • contextgetContext, switchContext
        • contextsgetContexts
        • currentActivitygetCurrentActivity
        • deviceKeyEventsendKeyEvent
        • getAppStringsgetStrings
        • hideDeviceKeyboardhideKeyboard
        • holdlongPressKeyCode
        • launchlaunchApp
        • performMultiActionmultiTouchPerform
        • pressKeycodepressKeyCode
        • rotaterotateDevice
        • setImmediateValuesetValueImmediate
        • settingsgetSettings, updateSettings
        • stringsgetStrings
        • toggleTouchIdEnrollmenttoggleEnrollTouchId
      • removed commands (Note: there are chances that removed commands will come back if their use case scenario seem to be reasonable.):
        • doDoubleClick, doubleClick - replace with double click command or performActions command
        • dragAndDrop - replace with performActions command
        • leftClick, middleClick, rightClick - replace with performActions command
        • selectByValue - replace with selectByAttribute('value')
        • selectorExecute, selectorExecuteAsync - replace with execute(elem)
        • submit - replace by clicking on submit button
        • getCurrentDeviceActivity - replace by getCurrentActivity
        • release - replace by touchAction command
        • swipe, swipeDown, swipeLeft, swipeRight, swipeUp - replace by touchAction command
        • performTouchAction - replace by touchPerform
        • with no replacements: init, buttonPress, file, chooseFile, uploadFile, endAll, getCommandHistory, waitForSelected, waitForText, waitForValue, getGridNodeDetails, gridProxyDetails, gridTestSession, hold
      • new commands:
        • WebDriver / JsonWireProtocol: minimizeWindow
        • Appium: startRecordingScreen, stopRecordingScreen, isKeyboardShown, getSystemBars, getDisplayDensity, endCoverage, replaceValue, receiveAsyncResponse, gsmCall, gsmSignal, gsmVoice, sendSms, fingerPrint
    • ➕ adding custom commands are scoped to the prototype they are being added to

      // v4
      browser.addCommand('myCommand', () => { ... })
      const elem = $('myElem')
      console.log(typeof browser.myCommand) // outputs "function"
      console.log(typeof elem.myCommand) // outputs "function"
      
      // v5
      browser.addCommand('myCommand', () => { ... })
      const elem = $('myElem')
      console.log(typeof browser.myCommand) // outputs "function"
      console.log(typeof elem.myCommand) // outputs "undefined"
      elem.addCommand('myElemCommand', () => { ... })
      console.log(typeof elem.myElemCommand) // outputs "function"
      const elem2 = $('myOtherElem')
      console.log(typeof elem2.myElemCommand) // outputs "undefined"
      
    • spec and suite cli arguments are now passed as an array, e.g.

      // v4
      ./node_modules/.bin/wdio wdio.conf.js --spec ./tests/foobar.js,./tests/baz.js
      

    ./node_modules/.bin/wdio wdio.conf.js --suite FooBar,BarBaz

    ./node_modules/.bin/wdio wdio.conf.js --suite FooBar

      ```js
      // v5
      ./node_modules/.bin/wdio wdio.conf.js --spec ./tests/foobar.js ./tests/baz.js
    
      ./node_modules/.bin/wdio wdio.conf.js --suite FooBar BarBaz
    
      ./node_modules/.bin/wdio wdio.conf.js --suite FooBar
    
    • 🔧 custom configuration for services or reporters are now directly applied to the config list, e.g. js // ... reporters: [ 'spec', [ 'junit', { outputDir: __dirname + '/junit_logs' } ] ], // ...

    :eyeglasses: Spec Compliancy

    • implemented parameter assertions for protocol commands
    • full W3C WebDriver compliancy
    • full Appium and Mobile JSONWire Protocol compliancy
    • 🚧 simplified protocol command maintenance by defining commands, their parameters and response values within simple json constructs
    • 👍 instead of switching protocol within a running session, WebdriverIO now determines the supported protocol by the driver based on the create session response

    :rocket: New Feature

    • 🆕 new package @wdio/applitools-service for simple visual regression testing with Applitools
    • 🆕 new package eslint-plugin-wdio for WebdriverIO specific linting rules for ESLint
    • 🐎 @wdio/devtools-service now with frontend performance testing capabilities (see example)
    • 🆕 new region option to simply run tests on SauceLabs in different datacenters
    • 💻 debug command now allows to connect the runner with the Chrome DevTools application for more indepth debugging
    • 📦 decoupling of @wdio/sync package from framework adapters so that there is no need to install fibers when you want to run your commands with async/await
    • 🌲 autofetching of all provides log types
    • auto retry mechansim for all command requests
    • auto refetch mechanism for stale elements
    • simplified reattachment to existing sessions with attach functionality
    • ↔ integrated and auto maintained TypeScript definitions
    • ✅ wdio testrunner fails if no spec files were found

    :bug: Bug Fix

    • 🛠 fixed loss of scope when chaining elements (e.g. $$('div')[2].$('span').getHTML())
    • ⚡️ browser scope with now updated capabilities (browser.capabilities)
    • 👌 improved watch functionality allows to rerun tests without starting a new session all over again
    • 🛠 fixed problems with addCommand in multiremote

    📚 :memo: Documentation

    • 📚 brand new documentation page based on the Docusaurus framework
      • written in a modern web framework called React
      • completely responsive with full support for mobile viewports
    • included blog for WebdriverIO related news and article
    • 🛠 fixed links to edit certain documentation pages
    • 📚 documentation page served via HTTPS per default

    :house: Internal

    • complete rearchitecturing of the whole project into a monorepo
    • 📦 moved all protocol commands into a webdriver base package
    • 🚀 project sub packages are now released within the @wdio NPM organization
    • 📦 renamed services, reporters and other internal packages (e.g. wdio-sauce-service@wdio/sauce-service)
    • ✂ removed all e2e tests from project to run as unit tests using Jest with a coverage of ~96%
    • ⚡️ update to Babel v7 (latest) as well as various of other dependency updates with security fixes
    • CPU and Memory improvements by reducing amount of IPC calls

    💅 :nail_care: Polish