Best JavaScript code snippet using playwright-internal
grasp.js
Source: grasp.js
...4909 '>': 'child',4910 '~': 'sibling',4911 '+': 'adjacent'4912 };4913 function consumeComplexSelector(tokens){4914 var ops, root, wildcard, result, op, opVal, selector;4915 ops = /^[\s>~+]$/;4916 root = {4917 type: 'root'4918 };4919 wildcard = {4920 type: 'wildcard'4921 };4922 result = peekOp(tokens, ops)4923 ? root4924 : consumeCompoundSelector(tokens);4925 while (peekOp(tokens, ops)) {4926 op = tokens.shift();4927 opVal = op.value;4928 selector = consumeCompoundSelector(tokens);4929 result = {4930 type: operatorMap[opVal],4931 operator: opVal,4932 left: result,4933 right: selector || wildcard4934 };4935 }4936 return result;4937 }4938 function consumeCompoundSelector(tokens){4939 var result, that, selector;4940 result = consumeSelector(tokens);4941 if (that = consumeProps(tokens)) {4942 result = (that.left = result, that);4943 }4944 while (tokens.length > 0) {4945 selector = consumeSelector(tokens);4946 if (selector) {4947 if (result.type !== 'compound') {4948 result = {4949 type: 'compound',4950 selectors: [result]4951 };4952 }4953 result.selectors.push(selector);4954 if (that = consumeProps(tokens)) {4955 result = (that.left = result, that);4956 }4957 } else {4958 break;4959 }4960 }4961 return result || selector;4962 }4963 function mapSimpleSelector(value){4964 return {4965 type: 'identifier',4966 value: aliasMap[value] || value4967 };4968 }4969 function consumeIdentifier(tokens){4970 var value, val;4971 value = tokens.shift().value;4972 if (value in literalMap) {4973 return {4974 type: 'compound',4975 selectors: [4976 {4977 type: 'identifier',4978 value: 'Literal'4979 }, {4980 type: 'attribute',4981 name: 'value',4982 operator: '=',4983 valType: 'primitive',4984 value: {4985 type: 'type',4986 value: literalMap[value]4987 }4988 }4989 ]4990 };4991 } else if (value in matchesMap || value in matchesAliasMap) {4992 return {4993 type: 'matches',4994 selectors: (function(){4995 var i$, ref$, len$, results$ = [];4996 for (i$ = 0, len$ = (ref$ = matchesMap[matchesAliasMap[value] || value]).length; i$ < len$; ++i$) {4997 val = ref$[i$];4998 results$.push({4999 type: 'identifier',5000 value: val5001 });5002 }5003 return results$;5004 }())5005 };5006 } else if (value in complexTypeMap) {5007 switch (complexTypeMap[value]) {5008 case 'ImmediatelyInvokedFunctionExpression':5009 return {5010 type: 'compound',5011 selectors: [5012 {5013 type: 'identifier',5014 value: 'CallExpression'5015 }, {5016 type: 'attribute',5017 name: 'callee',5018 operator: '=',5019 valType: 'complex',5020 value: {5021 type: 'matches',5022 selectors: [5023 {5024 type: 'identifier',5025 value: 'FunctionExpression'5026 }, {5027 type: 'compound',5028 selectors: [5029 {5030 type: 'identifier',5031 value: 'MemberExpression'5032 }, {5033 type: 'attribute',5034 name: 'object',5035 operator: '=',5036 valType: 'complex',5037 value: {5038 type: 'identifier',5039 value: 'FunctionExpression'5040 }5041 }, {5042 type: 'attribute',5043 name: 'property',5044 operator: '=',5045 valType: 'complex',5046 value: {5047 type: 'matches',5048 selectors: [5049 {5050 type: 'compound',5051 selectors: [5052 {5053 type: 'identifier',5054 value: 'Identifier'5055 }, {5056 type: 'attribute',5057 name: 'name',5058 operator: '=',5059 valType: 'primitive',5060 value: {5061 type: 'literal',5062 value: 'call'5063 }5064 }5065 ]5066 }, {5067 type: 'compound',5068 selectors: [5069 {5070 type: 'identifier',5071 value: 'Identifier'5072 }, {5073 type: 'attribute',5074 name: 'name',5075 operator: '=',5076 valType: 'primitive',5077 value: {5078 type: 'literal',5079 value: 'apply'5080 }5081 }5082 ]5083 }5084 ]5085 }5086 }5087 ]5088 }5089 ]5090 }5091 }5092 ]5093 };5094 }5095 } else {5096 return mapSimpleSelector(value);5097 }5098 }5099 function consumeSelector(tokens){5100 var selector, token, value;5101 selector = peekType(tokens, 'wildcard')5102 ? tokens.shift()5103 : peekOp(tokens, '::')5104 ? (tokens.shift(), consumeIdentifier(tokens))5105 : peekType(tokens, ['keyword', 'identifier'])5106 ? consumeIdentifier(tokens)5107 : peekType(tokens, ['number', 'string', 'regexp', 'boolean', 'null'])5108 ? consumeLiteral(tokens)5109 : peekOp(tokens, ':')5110 ? consumePseudo(tokens)5111 : peekOp(tokens, /\[&?/)5112 ? consumeAttribute(tokens)5113 : peekOp(tokens, '#')5114 ? (consumeOp(tokens, '#'), token = tokens.shift(), value = token.value, {5115 type: 'compound',5116 selectors: [5117 {5118 type: 'identifier',5119 value: 'Identifier'5120 }, {5121 type: 'attribute',5122 name: 'name',5123 operator: token.type === 'regexp' ? '=~' : '=',5124 valType: 'primitive',5125 value: {5126 type: 'literal',5127 value: value5128 }5129 }5130 ]5131 })5132 : peekOp(tokens, '(')5133 ? consumeImplicitMatches(tokens)5134 : peekOp(tokens, '.') ? {5135 type: 'root'5136 } : void 8;5137 if (selector) {5138 if (peekOp(tokens, '!')) {5139 tokens.shift();5140 selector.subject = true;5141 }5142 }5143 return selector;5144 }5145 function consumeProps(tokens){5146 var props, propSubjectIndices, i, ref$;5147 props = [];5148 propSubjectIndices = {};5149 i = 0;5150 while (peekOp(tokens, '.') || peekOp(tokens, ':') && ((ref$ = tokens[1].value) === 'first' || ref$ === 'head' || ref$ === 'tail' || ref$ === 'last' || ref$ === 'initial' || ref$ === 'nth' || ref$ === 'nth-last' || ref$ === 'slice')) {5151 props.push(peekOp(tokens, '.')5152 ? consumeProp(tokens)5153 : consumePseudo(tokens));5154 if (peekOp(tokens, '!')) {5155 consumeOp(tokens, '!');5156 propSubjectIndices[i] = true;5157 }5158 i++;5159 }5160 if (props.length) {5161 return {5162 type: 'prop',5163 props: props,5164 subjects: propSubjectIndices5165 };5166 }5167 }5168 function consumeLiteral(tokens){5169 var token, value;5170 token = tokens.shift();5171 value = token.value;5172 return {5173 type: 'compound',5174 selectors: [5175 {5176 type: 'identifier',5177 value: 'Literal'5178 }, {5179 type: 'attribute',5180 name: 'value',5181 operator: '=',5182 valType: 'primitive',5183 value: {5184 type: 'literal',5185 value: value5186 }5187 }5188 ]5189 };5190 }5191 function consumePseudo(tokens){5192 var op, id, that;5193 op = consumeOp(tokens, ':');5194 id = consumeType(tokens, 'keyword');5195 switch (that = id.value) {5196 case 'root':5197 case 'first':5198 case 'head':5199 case 'tail':5200 case 'last':5201 case 'initial':5202 return {5203 type: that5204 };5205 case 'nth':5206 case 'nth-last':5207 case 'nth-child':5208 case 'nth-last-child':5209 return {5210 type: that,5211 index: consumeArg(tokens)5212 };5213 case 'slice':5214 return {5215 type: that,5216 indicies: consumeArgList(tokens)5217 };5218 case 'first-child':5219 return {5220 type: 'nth-child',5221 index: {5222 type: 'literal',5223 value: 05224 }5225 };5226 case 'last-child':5227 return {5228 type: 'nth-last-child',5229 index: {5230 type: 'literal',5231 value: 05232 }5233 };5234 case 'matches':5235 return consumeImplicitMatches(tokens);5236 case 'not':5237 return {5238 type: that,5239 selectors: consumeComplexArgList(tokens)5240 };5241 default:5242 throw createError('Unexpected keyword:', id, tokens);5243 }5244 }5245 function consumeName(tokens){5246 var name, val;5247 name = '';5248 while (!name || peekOp(tokens, '.')) {5249 if (name) {5250 consumeOp(tokens, '.');5251 name += '.';5252 }5253 val = consumeType(tokens, ['keyword', 'identifier']).value;5254 name += attrMap[val] || val;5255 }5256 return name;5257 }5258 function consumeAttribute(tokens){5259 var op, name, lastName, nextOp, nextToken, val, ref$, valType, value, selector;5260 op = consumeType(tokens, 'operator').value;5261 name = consumeName(tokens);5262 lastName = last(name.split('.'));5263 nextOp = consumeType(tokens, 'operator').value;5264 if (nextOp === ']') {5265 return {5266 type: 'attribute',5267 name: name5268 };5269 } else {5270 nextToken = tokens[0];5271 ref$ = op === '[&' || nextToken.type === 'type' || in$(lastName, primitiveOnlyAttributes)5272 ? ['primitive', consumeValue(tokens)]5273 : in$(lastName, eitherAttributes)5274 ? (val = consumeValue([tokens[0]]), [5275 'either', {5276 type: val.type,5277 value: val.value,5278 sel: consumeSelector(tokens)5279 }5280 ])5281 : ['complex', consumeComplexSelector(tokens)], valType = ref$[0], value = ref$[1];5282 selector = {5283 type: 'attribute',5284 name: name,5285 operator: nextOp,5286 valType: valType,5287 value: value5288 };5289 consumeOp(tokens, ']');5290 return selector;5291 }5292 }5293 function consumeProp(tokens){5294 var token, name;5295 consumeOp(tokens, '.');5296 if (peekType(tokens, ['identifier', 'number', 'null', 'boolean'])) {5297 token = consumeType(tokens, ['identifier', 'number', 'null', 'boolean']);5298 name = token.value;5299 return {5300 type: 'string',5301 value: attrMap[name] || name5302 };5303 } else {5304 return {5305 type: 'wildcard'5306 };5307 }5308 }5309 function consumeComplexArgList(tokens){5310 var result, arg;5311 consumeOp(tokens, '(');5312 result = [];5313 while (tokens.length > 0) {5314 arg = consumeComplexSelector(tokens);5315 if (arg) {5316 result.push(arg);5317 } else {5318 throw createError('Expected selector argument:', tokens[0], tokens);5319 }5320 if (peekOp(tokens, ',')) {5321 consumeOp(tokens, ',');5322 } else {5323 break;5324 }5325 }5326 consumeOp(tokens, ')');5327 return result;5328 }...
cssParser.js
Source: cssParser.js
...86 function consumeArgument() {87 skipWhitespace();88 if (isNumber()) return tokens[pos++].value;89 if (isString()) return tokens[pos++].value;90 return consumeComplexSelector();91 }92 function consumeComplexSelector() {93 skipWhitespace();94 const result = {95 simples: [{96 selector: consumeSimpleSelector(),97 combinator: ''98 }]99 };100 while (true) {101 skipWhitespace();102 if (isClauseCombinator()) {103 result.simples[result.simples.length - 1].combinator = tokens[pos++].value;104 skipWhitespace();105 } else if (isSelectorClauseEnd()) {106 break;...
Using AI Code Generation
1const { consumeComplexSelector } = require('playwright/lib/client/selectorEngine');2const { chromium } = require('playwright');3(async () => {4 const browser = await chromium.launch();5 const context = await browser.newContext();6 const page = await context.newPage();7 const selector = await consumeComplexSelector('text=Playwright');8 await page.waitForSelector(selector);9 await browser.close();10})();11const { consumeComplexSelector } = require('playwright/lib/client/selectorEngine');12const { chromium } = require('playwright');13(async () => {14 const browser = await chromium.launch();15 const context = await browser.newContext();16 const page = await context.newPage();17 await page.waitForSelector(await consumeComplexSelector('text=Playwright'));18 await browser.close();19})();20const { consumeComplexSelector } = require('playwright/lib/client/selectorEngine');21const { chromium } = require('playwright');22(async () => {23 const browser = await chromium.launch();24 const context = await browser.newContext();25 const page = await context.newPage();26 await page.waitForSelector(await consumeComplexSelector('text=Playwright'));27 await browser.close();28})();29const { consumeComplexSelector } = require('playwright/lib/client/selectorEngine');30const { chromium } = require('playwright');31(async () => {32 const browser = await chromium.launch();33 const context = await browser.newContext();34 const page = await context.newPage();35 await page.waitForSelector(await consumeComplexSelector('text=Playwright'));36 await browser.close();37})();38const { consumeComplexSelector } = require('playwright/lib/client/selectorEngine');39const { chromium } = require('playwright');40(async () => {41 const browser = await chromium.launch();42 const context = await browser.newContext();
Using AI Code Generation
1const { consumeComplexSelector } = require('@playwright/test/lib/server/selectorEngine');2const { parseSelector } = require('@playwright/test/lib/server/selectorParser');3const { test } = require('@playwright/test');4test('test', async ({ page }) => {5 await page.setContent(`<div class="foo"><div class="bar"></div></div>`);6 const selector = parseSelector('css=div.foo >> css=div.bar');7 const complexSelector = consumeComplexSelector(selector);8 const handle = await page.$(complexSelector);9 console.log(await handle.getAttribute('class'));10});
Using AI Code Generation
1const { consumeComplexSelector } = require('playwright-core/lib/server/selectors/selectorEngine');2const { Selector } = require('playwright-core/lib/server/selectors/selector');3const { parseSelector } = require('playwright-core/lib/server/selectors/parser');4const { SelectorEvaluator } = require('playwright-core/lib/server/selectors/evaluator');5const selector = parseSelector('text="Add to basket"');6const selectorEvaluator = new SelectorEvaluator();7const result = consumeComplexSelector(selector, selectorEvaluator);8console.log(result);
Using AI Code Generation
1const { consumeComplexSelector } = require('@playwright/test/lib/complexSelector');2const { test } = require('@playwright/test');3test('test', async ({ page }) => {4 const element = await consumeComplexSelector('text=Get started');5 await element.click();6});
Using AI Code Generation
1const { consumeComplexSelector } = require('playwright/lib/server/dom.js');2const { parseSelector } = require('playwright/lib/server/selectorParser.js');3const { toCSSSelector } = require('playwright/lib/server/selectorEngine.js');4const { toJQuerySelector } = require('playwright/lib/server/selectorEngine.js');5const { toTextSelector } = require('playwright/lib/server/selectorEngine.js');6const { toXPath } = require('playwright/lib/server/selectorEngine.js');7const { evaluate } = require('playwright/lib/server/dom.js');8const { evaluateHandle } = require('playwright/lib/server/dom.js');9const { parseSelector } = require('playwright/lib/server/selectorParser.js');10const { toCSSSelector } = require('playwright/lib/server/selectorEngine.js');11const { toJQuerySelector } = require('playwright/lib/server/selectorEngine.js');12const { toTextSelector } = require('playwright/lib/server/selectorEngine.js');13const { toXPath } = require('playwright/lib/server/selectorEngine.js');14const { toError } = require('playwright/lib/server/error.js');15const { toProtocolError } = require('playwright/lib/server/error.js');16const { toErrorString } = require('playwright/lib/server/error.js');17const { toExceptionMessage } = require('playwright/lib/server/error.js');18const { toExceptionDetails } = require('playwright/lib/server/error.js');19const { toConsoleMessageLocation } = require('playwright/lib/server/error.js');
Using AI Code Generation
1const { consumeComplexSelector } = require('@playwright/test/lib/utils/complexSelectorParser');2const { parseSelector } = require('@playwright/test/lib/utils/selectorParser');3const selector = 'css=div >> css=button >> text="Click me"';4const complexSelector = parseSelector(selector);5const parsedSelector = consumeComplexSelector(complexSelector);6console.log(parsedSelector);7{8 {9 },10 {11 },12 {13 }14}15const { consumeComplexSelector } = require('@playwright/test/lib/utils/complexSelectorParser');16const { parseSelector } = require('@playwright/test/lib/utils/selectorParser');17const { Selector } = require('@playwright/test');18const selector = 'css=div >> css=button >> text="Click me"';19const complexSelector = parseSelector(selector);20const parsedSelector = consumeComplexSelector(complexSelector);21console.log(parsedSelector);22const selectorEngine = (selector) => {23 return Selector(selector);24};25const createComplexSelector = (parsedSelector) => {26 let complexSelector = selectorEngine(parsedSelector.parts[0].selector);27 for (let i = 1; i < parsedSelector.parts.length; i++) {
Using AI Code Generation
1const { consumeComplexSelector } = require('playwright/lib/server/selectorParser');2const parsedSelector = consumeComplexSelector(complexSelector);3const { consumeTextSelector } = require('playwright/lib/server/selectorParser');4const textSelector = 'text=Login';5const parsedSelector = consumeTextSelector(textSelector);6const { consumeSelector } = require('playwright/lib/server/selectorParser');7const parsedSelector = consumeSelector(selector);8const { consumeSelectorEngine } = require('playwright/lib/server/selectorParser');9const selectorEngine = 'css=button';10const parsedSelector = consumeSelectorEngine(selectorEngine);11const { parseSelector } = require('playwright/lib/server/selectorParser');12const parsedSelector = parseSelector(selector);13const { parseSelector } = require('playwright/lib/server/selectorParser');14const selector = 'text=Login';15const parsedSelector = parseSelector(selector);16const { parseSelector } = require('playwright/lib/server/selectorParser');17const parsedSelector = parseSelector(selector);
Jest + Playwright - Test callbacks of event-based DOM library
firefox browser does not start in playwright
Is it possible to get the selector from a locator object in playwright?
How to run a list of test suites in a single file concurrently in jest?
Running Playwright in Azure Function
firefox browser does not start in playwright
This question is quite close to a "need more focus" question. But let's try to give it some focus:
Does Playwright has access to the cPicker object on the page? Does it has access to the window object?
Yes, you can access both cPicker and the window object inside an evaluate call.
Should I trigger the events from the HTML file itself, and in the callbacks, print in the DOM the result, in some dummy-element, and then infer from that dummy element text that the callbacks fired?
Exactly, or you can assign values to a javascript variable:
const cPicker = new ColorPicker({
onClickOutside(e){
},
onInput(color){
window['color'] = color;
},
onChange(color){
window['result'] = color;
}
})
And then
it('Should call all callbacks with correct arguments', async() => {
await page.goto(`http://localhost:5000/tests/visual/basic.html`, {waitUntil:'load'})
// Wait until the next frame
await page.evaluate(() => new Promise(requestAnimationFrame))
// Act
// Assert
const result = await page.evaluate(() => window['color']);
// Check the value
})
Check out the latest blogs from LambdaTest on this topic:
Native apps are developed specifically for one platform. Hence they are fast and deliver superior performance. They can be downloaded from various app stores and are not accessible through browsers.
One of the essential parts when performing automated UI testing, whether using Selenium or another framework, is identifying the correct web elements the tests will interact with. However, if the web elements are not located correctly, you might get NoSuchElementException in Selenium. This would cause a false negative result because we won’t get to the actual functionality check. Instead, our test will fail simply because it failed to interact with the correct element.
Smartphones have changed the way humans interact with technology. Be it travel, fitness, lifestyle, video games, or even services, it’s all just a few touches away (quite literally so). We only need to look at the growing throngs of smartphone or tablet users vs. desktop users to grasp this reality.
As part of one of my consulting efforts, I worked with a mid-sized company that was looking to move toward a more agile manner of developing software. As with any shift in work style, there is some bewilderment and, for some, considerable anxiety. People are being challenged to leave their comfort zones and embrace a continuously changing, dynamic working environment. And, dare I say it, testing may be the most ‘disturbed’ of the software roles in agile development.
LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!