How to use _hasFocusableChild method in Puppeteer

Best JavaScript code snippet using puppeteer

Accessibility.js

Source:Accessibility.js Github

copy

Full Screen

...115 }116 /**117 * @return {boolean}118 */119 _hasFocusableChild() {120 if (this._cachedHasFocusableChild === undefined) {121 this._cachedHasFocusableChild = false;122 for (const child of this._children) {123 if (child._focusable || child._hasFocusableChild()) {124 this._cachedHasFocusableChild = true;125 break;126 }127 }128 }129 return this._cachedHasFocusableChild;130 }131 /**132 * @return {boolean}133 */134 isLeafNode() {135 if (!this._children.length)136 return true;137 // These types of objects may have children that we use as internal138 // implementation details, but we want to expose them as leaves to platform139 // accessibility APIs because screen readers might be confused if they find140 // any children.141 if (this._isPlainTextField() || this._isTextOnlyObject())142 return true;143 // Roles whose children are only presentational according to the ARIA and144 // HTML5 Specs should be hidden from screen readers.145 // (Note that whilst ARIA buttons can have only presentational children, HTML5146 // buttons are allowed to have content.)147 switch (this._role) {148 case 'graphic':149 case 'scrollbar':150 case 'slider':151 case 'separator':152 case 'progressbar':153 return true;154 default:155 break;156 }157 // Here and below: Android heuristics158 if (this._hasFocusableChild())159 return false;160 if (this._focusable && this._name)161 return true;162 if (this._role === 'heading' && this._name)163 return true;164 return false;165 }166 /**167 * @return {boolean}168 */169 isControl() {170 switch (this._role) {171 case 'checkbutton':172 case 'check menu item':...

Full Screen

Full Screen

AXNode.js

Source:AXNode.js Github

copy

Full Screen

...66 default:67 break68 }69 // Here and below: Android heuristics70 if (this._hasFocusableChild()) {71 return false72 }73 if (this._focusable && this._name) {74 return true75 }76 if (this._role === 'heading' && this._name) {77 return true78 }79 return false80 }81 /**82 * @return {boolean}83 */84 isControl () {85 switch (this._role) {86 case 'button':87 case 'checkbox':88 case 'ColorWell':89 case 'combobox':90 case 'DisclosureTriangle':91 case 'listbox':92 case 'menu':93 case 'menubar':94 case 'menuitem':95 case 'menuitemcheckbox':96 case 'menuitemradio':97 case 'radio':98 case 'scrollbar':99 case 'searchbox':100 case 'slider':101 case 'spinbutton':102 case 'switch':103 case 'tab':104 case 'textbox':105 case 'tree':106 return true107 default:108 return false109 }110 }111 /**112 * @param {boolean} insideControl113 * @return {boolean}114 */115 isInteresting (insideControl) {116 const role = this._role117 if (role === 'Ignored') return false118 if (this._focusable || this._richlyEditable) return true119 // If it's not focusable but has a control role, then it's interesting.120 if (this.isControl()) return true121 // A non focusable child of a control is not interesting122 if (insideControl) return false123 return this.isLeafNode() && !!this._name124 }125 /**126 * @param {function(AXNode):boolean} predicate127 * @return {?AXNode}128 */129 find (predicate) {130 if (predicate(this)) return this131 for (let i = 0; i < this._children.length; i++) {132 const result = this._children[i].find(predicate)133 if (result) return result134 }135 return null136 }137 /**138 * @return {!SerializedAXNode}139 */140 serialize () {141 /** @type {!Map<string, number|string|boolean>} */142 const properties = new Map()143 for (const property of this._payload.properties || []) {144 properties.set(property.name.toLowerCase(), property.value.value)145 }146 if (this._payload.name) properties.set('name', this._payload.name.value)147 if (this._payload.value) properties.set('value', this._payload.value.value)148 if (this._payload.description) {149 properties.set('description', this._payload.description.value)150 }151 /** @type {SerializedAXNode} */152 const node = { role: this._role }153 /** @type {Array<string>} */154 const userStringProperties = [155 'name',156 'value',157 'description',158 'keyshortcuts',159 'roledescription',160 'valuetext'161 ]162 for (const userStringProperty of userStringProperties) {163 if (!properties.has(userStringProperty)) continue164 node[userStringProperty] = properties.get(userStringProperty)165 }166 /** @type {Array<string>} */167 const booleanProperties = [168 'disabled',169 'expanded',170 'focused',171 'modal',172 'multiline',173 'multiselectable',174 'readonly',175 'required',176 'selected'177 ]178 for (const booleanProperty of booleanProperties) {179 // WebArea's treat focus differently than other nodes. They report whether their frame has focus,180 // not whether focus is specifically on the root node.181 if (booleanProperty === 'focused' && this._role === 'WebArea') continue182 const value = properties.get(booleanProperty)183 if (!value) continue184 node[booleanProperty] = value185 }186 /** @type {Array<string>} */187 const tristateProperties = ['checked', 'pressed']188 for (const tristateProperty of tristateProperties) {189 if (!properties.has(tristateProperty)) continue190 const value = properties.get(tristateProperty)191 node[tristateProperty] = value === 'mixed' ? 'mixed' : value === 'true'192 }193 /** @type {Array<string>} */194 const numericalProperties = ['level', 'valuemax', 'valuemin']195 for (const numericalProperty of numericalProperties) {196 if (!properties.has(numericalProperty)) continue197 node[numericalProperty] = properties.get(numericalProperty)198 }199 /** @type {Array<string>} */200 const tokenProperties = [201 'autocomplete',202 'haspopup',203 'invalid',204 'orientation'205 ]206 for (const tokenProperty of tokenProperties) {207 const value = properties.get(tokenProperty)208 if (!value || value === 'false') continue209 node[tokenProperty] = value210 }211 return node212 }213 /**214 * @return {boolean}215 */216 _isPlainTextField () {217 if (this._richlyEditable) return false218 if (this._editable) return true219 return (220 this._role === 'textbox' ||221 this._role === 'ComboBox' ||222 this._role === 'searchbox'223 )224 }225 /**226 * @return {boolean}227 */228 _isTextOnlyObject () {229 const role = this._role230 return role === 'LineBreak' || role === 'text' || role === 'InlineTextBox'231 }232 /**233 * @return {boolean}234 */235 _hasFocusableChild () {236 if (this._cachedHasFocusableChild === undefined) {237 this._cachedHasFocusableChild = false238 for (const child of this._children) {239 if (child._focusable || child._hasFocusableChild()) {240 this._cachedHasFocusableChild = true241 break242 }243 }244 }245 return this._cachedHasFocusableChild246 }247 toJSON () {248 return this._payload249 }250 /** @ignore */251 // eslint-disable-next-line space-before-function-paren252 [util.inspect.custom](depth, options) {253 if (depth < 0) {...

Full Screen

Full Screen

ffAccessibility.js

Source:ffAccessibility.js Github

copy

Full Screen

...86 _isTextOnlyObject() {87 const role = this._role;88 return role === 'text leaf' || role === 'text' || role === 'statictext';89 }90 _hasFocusableChild() {91 if (this._cachedHasFocusableChild === undefined) {92 this._cachedHasFocusableChild = false;93 for (const child of this._children) {94 if (child._focusable || child._hasFocusableChild()) {95 this._cachedHasFocusableChild = true;96 break;97 }98 }99 }100 return this._cachedHasFocusableChild;101 }102 children() {103 return this._children;104 }105 _findNeedle() {106 if (this._payload.foundObject) return this;107 for (const child of this._children) {108 const found = child._findNeedle();109 if (found) return found;110 }111 return null;112 }113 isLeafNode() {114 if (!this._children.length) return true; // These types of objects may have children that we use as internal115 // implementation details, but we want to expose them as leaves to platform116 // accessibility APIs because screen readers might be confused if they find117 // any children.118 if (this._isPlainTextField() || this._isTextOnlyObject()) return true; // Roles whose children are only presentational according to the ARIA and119 // HTML5 Specs should be hidden from screen readers.120 // (Note that whilst ARIA buttons can have only presentational children, HTML5121 // buttons are allowed to have content.)122 switch (this._role) {123 case 'graphic':124 case 'scrollbar':125 case 'slider':126 case 'separator':127 case 'progressbar':128 return true;129 default:130 break;131 } // Here and below: Android heuristics132 if (this._hasFocusableChild()) return false;133 if (this._focusable && this._role !== 'document' && this._name) return true;134 if (this._role === 'heading' && this._name) return true;135 return false;136 }137 isControl() {138 switch (this._role) {139 case 'checkbutton':140 case 'check menu item':141 case 'check rich option':142 case 'combobox':143 case 'combobox option':144 case 'color chooser':145 case 'listbox':146 case 'listbox option':...

Full Screen

Full Screen

Using AI Code Generation

copy

Full Screen

1const puppeteer = require('puppeteer');2(async () => {3 const browser = await puppeteer.launch({headless: false});4 const page = await browser.newPage();5 const hasFocusableChild = await page.evaluate(() => {6 const element = document.querySelector('input[name="q"]');7 return element._hasFocusableChild();8 });9 console.log(hasFocusableChild);10 await browser.close();11})();

Full Screen

Using AI Code Generation

copy

Full Screen

1const puppeteer = require('puppeteer');2(async () => {3 const browser = await puppeteer.launch({headless: false});4 const page = await browser.newPage();5 const hasFocusableContent = await page.evaluate(() => {6 return document._hasFocusableChild(document.body);7 });8 console.log(hasFocusableContent);9 await browser.close();10})();

Full Screen

Using AI Code Generation

copy

Full Screen

1const puppeteer = require('puppeteer');2(async () => {3 const browser = await puppeteer.launch();4 const page = await browser.newPage();5 await page.waitForSelector('input[name="q"]');6 await page.focus('input[name="q"]');7 const hasFocusableChild = await page.evaluate(() => {8 const element = document.querySelector('input[name="q"]');9 return element._hasFocusableChild();10 });11 await browser.close();12})();

Full Screen

Using AI Code Generation

copy

Full Screen

1const puppeteer = require('puppeteer');2(async () => {3 const browser = await puppeteer.launch();4 const page = await browser.newPage();5 await page.focus('input[name="q"]');6 const hasFocusableChild = await page.evaluate(() => {7 const element = document.activeElement;8 return element._hasFocusableChild();9 });10 console.log(hasFocusableChild);11 await browser.close();12})();

Full Screen

Using AI Code Generation

copy

Full Screen

1const puppeteer = require('puppeteer');2const fs = require('fs');3const path = require('path');4(async () => {5 const browser = await puppeteer.launch();6 const page = await browser.newPage();7 const element = await page.$('div');8 const hasFocusableChild = await element._hasFocusableChild();9 console.log(hasFocusableChild);10 await browser.close();11})();

Full Screen

Using AI Code Generation

copy

Full Screen

1const puppeteer = require('puppeteer');2(async () => {3 const browser = await puppeteer.launch();4 const page = await browser.newPage();5 await page.goto(url);6 await page.waitForSelector('input[name=q]');7 const hasFocusableChild = await page.evaluate(() => {8 const element = document.querySelector('input[name=q]');9 return element._hasFocusableChild();10 });11 console.log(hasFocusableChild);12 await browser.close();13})();

Full Screen

Using AI Code Generation

copy

Full Screen

1const puppeteer = require('puppeteer');2(async () => {3 const browser = await puppeteer.launch();4 const page = await browser.newPage();5 await page.goto(url);6 const hasFocusableChild = await page.evaluate(() => {7 const element = document.querySelector('body');8 return _hasFocusableChild(element);9 });10 console.log(hasFocusableChild);11 await browser.close();12})();

Full Screen

Using AI Code Generation

copy

Full Screen

1const puppeteer = require('puppeteer');2const fs = require('fs');3(async () => {4 const browser = await puppeteer.launch();5 const page = await browser.newPage();6 await page.waitForSelector('input[type=text]');7 const element = await page.$('input[type=text]');8 const hasFocusableChild = await page.evaluate(element => {9 return element._hasFocusableChild();10 }, element);11 console.log(hasFocusableChild);12 await browser.close();13})();

Full Screen

Using AI Code Generation

copy

Full Screen

1const { PuppeteerPage } = require('@applitools/eyes-sdk-core');2(async () => {3 const puppeteer = require('puppeteer');4 const browser = await puppeteer.launch();5 const page = await browser.newPage();6 const puppeteerPage = new PuppeteerPage(page);7 const hasFocusableChild = await puppeteerPage._hasFocusableChild({selector: '#myElement'});8 console.log('hasFocusableChild', hasFocusableChild);9 await browser.close();10})();11{12 "dependencies": {13 }14}15{16 "dependencies": {17 "@applitools/eyes-sdk-core": {18 "requires": {19 }20 },

Full Screen

Using AI Code Generation

copy

Full Screen

1async function test() {2 const browser = await puppeteer.launch();3 const page = await browser.newPage();4 await page.waitForSelector('input[name="q"]');5 const hasFocusableChild = await page.$eval('input[name="q"]', (element) => {6 return element._hasFocusableChild();7 });8 console.log(hasFocusableChild);9 await browser.close();10}11test();

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run Puppeteer automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful