Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | 48x 13x 13x 5x 13x 4x 9x | /**
*
* Return true if the selected DOM-element is displayed.
*
* <example>
:index.html
<div id="notDisplayed" style="display: none"></div>
<div id="notVisible" style="visibility: hidden"></div>
<div id="notInViewport" style="position:absolute; left: 9999999"></div>
<div id="zeroOpacity" style="opacity: 0"></div>
:isDisplayed.js
it('should detect if an element is displayed', () => {
let elem = $('#notDisplayed');
let isDisplayed = elem.isDisplayed();
console.log(isDisplayed); // outputs: false
elem = $('#notVisible');
isDisplayed = elem.isDisplayed();
console.log(isDisplayed); // outputs: false
elem = $('#notExisting');
isDisplayed = elem.isDisplayed();
console.log(isDisplayed); // outputs: false
elem = $('#notInViewport');
isDisplayed = elem.isDisplayed();
console.log(isDisplayed); // outputs: true
elem = $('#zeroOpacity');
isDisplayed = elem.isDisplayed();
console.log(isDisplayed); // outputs: true
});
* </example>
*
* @alias element.isDisplayed
* @return {Boolean} true if element is displayed
* @uses protocol/elements, protocol/elementIdDisplayed
* @type state
*
*/
import { ELEMENT_KEY } from '../../constants'
import { getBrowserObject } from '../../utils'
import isElementDisplayedScript from '../../scripts/isElementDisplayed'
const noW3CEndpoint = ['microsoftedge', 'safari', 'chrome']
export default async function isDisplayed() {
let browser = getBrowserObject(this)
/*
* This is only necessary as isDisplayed is on the exclusion list for the middleware
*/
if (!this.elementId) {
this.elementId = (await this.parent.$(this.selector)).elementId
}
/*
* if element was still not found it also is not displayed
*/
if (!this.elementId) {
return false
}
/*
* https://www.w3.org/TR/webdriver/#element-displayedness
* Certain drivers have decided to remove the endpoint as the spec
* no longer dictates it. In those instances, we pass the element through a script
* that was provided by Brian Burg of safaridriver.
*
* 6th of May 2019 APPIUM response (mykola-mokhnach) :
* - Appium didn't enable W3C mode for mobile drivers.
* - Safari and Chrome work in jsonwp mode and Appium just rewrites W3C requests from upstream to jsonwp if needed
*/
return browser.isW3C && !browser.isMobile && noW3CEndpoint.includes(browser.capabilities.browserName.toLowerCase()) ?
await browser.execute(isElementDisplayedScript, {
[ELEMENT_KEY]: this.elementId, // w3c compatible
ELEMENT: this.elementId // jsonwp compatible
}) :
await this.isElementDisplayed(this.elementId)
}
|