You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[FEATURE REQUEST] Add Custom Strategy Locators to Playwright #4107
This Custom Strategy Locators feature is currently only available on WebdriverIO. However, since it's just a JavaScript execution to return element(s), it should be technically possible to export to Playwright (and the other web automation helpers). If we can do so, it makes easier to find elements more flexibly.
Example: Look up a table cell by the header row and column
// in codecept.conf.jsconstfindTableCellByHeader=(selector,rowHeader,colHeader)=>{// Find the tableconsttable=root.querySelector(selector)if(!table){thrownewError(`Table not found: ${selector}`);}// Find the rowconstrow=Array.from(table.querySelectorAll('tr')).find((tr)=>tr.querySelector('th')?.textContent===rowHeader);if(!row){thrownewError(`Row not found: ${rowHeader}`);}// Find the column indexconstcolIndex=Array.from(table.querySelectorAll('tr')[0].cells).findIndex((cell)=>cell.textContent===colHeader);if(colIndex===-1){console.log('Column not found');returnnull;}// Return the cell at the intersection of the row and columnreturnrow.cells[colIndex];}// under WebDriver Helpers Configuration
WebDriver: {
...
customLocatorStrategies: {findTableCellByHeader}}
This is the example of Webdriver helper, and I would like to enable it to the Playwright helper.
What do you get instead?
Currently the CustomLocator plugin only allows to use CSS or XPath, does not allow to find elements by JavaScript.
@tsuemura may you share some showcases of this feature? Cause I remembered we have getWebElements and using customLocator plugin. Or maybe I haven't got what you're aiming for.
Thank you @tsuemura I just went through the codeceptjs and noticed this.
Does it help you to locate the desired element after you had the returned web elements?
Now we expose the WebElements that are returned by the WebHelper and you could make the subsequence actions on them.
// Playwright helper would return the Locator
I.amOnPage('/form/focus_blur_elements');
const webElements = await I.grabWebElements('#button');
webElements[0].click();
@kobenguyent
That's an option. However, I personally don't love to use webElements[0].click() because webElement does not click itself - I want to keep the excellent syntax of "I do something" as the same as the other CodeceptJS methods. But if I understand correctly, methods like I.click() do not take web elements as the argument.
Activity
kobenguyent commentedon Jan 5, 2024
@tsuemura may you share some showcases of this feature? Cause I remembered we have getWebElements and using customLocator plugin. Or maybe I haven't got what you're aiming for.
tsuemura commentedon Jan 6, 2024
@kobenguyent Good point. I added an example on the description. Does it makes sense to you?
kobenguyent commentedon Jan 7, 2024
Thank you @tsuemura I just went through the codeceptjs and noticed this.
Does it help you to locate the desired element after you had the returned web elements?
tsuemura commentedon Jan 7, 2024
@kobenguyent
That's an option. However, I personally don't love to use
webElements[0].click()because webElement does not click itself - I want to keep the excellent syntax of "I do something" as the same as the other CodeceptJS methods. But if I understand correctly, methods likeI.click()do not take web elements as the argument.github-actions commentedon Apr 7, 2024
This issue is stale because it has been open for 90 days with no activity.
DavertMik commentedon Apr 12, 2024
@kobenguyent can we close this with support of
pwlocators in latest release?or it is something different?
kobenguyent commentedon Apr 13, 2024
I guess the request from @tsuemura is something like supporting the finding elements by JavaScript, if I got it correctly.
tsuemura commentedon Apr 14, 2024
@kobenguyent Right. The request is not the same as supporting
pwlocators.kobenguyent commentedon Apr 15, 2024
@tsuemura if you already have the implementation for it, just don't hesitate to submit your PR.
github-actions commentedon Aug 24, 2024
This issue is stale because it has been open for 90 days with no activity.