-
Notifications
You must be signed in to change notification settings - Fork 1.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add isPresent
command.
#4216
base: main
Are you sure you want to change the base?
Add isPresent
command.
#4216
Conversation
Status
|
There are some failing tests. Not sure if it is due to the changes made here. Can you help take a look? Thank you! |
@pujagani yes, fixed those. There was a missing check for outofbounds index. |
I think the test that is failing is flakey. I can't see a test for this change can we add one? |
@garg3133 @AutomatedTester ready for review! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Posted a few reviews below. Otherwise, looks good!
if (args[0]?.suppressNotFoundErrors) { | ||
this._suppressNotFoundErrors = true; | ||
} | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can be moved to the top of function.
@@ -172,7 +176,7 @@ class ScopedWebElement { | |||
|
|||
return await this.findElement({parentElement, selector: condition, index, timeout, retryInterval}); | |||
} catch (error) { | |||
if (suppressNotFoundErrors) { | |||
if (this.suppressNotFoundErrors ?? suppressNotFoundErrors) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No need to have two suppressNotFoundErrors
, just keep the this.suppressNotFoundErrors
.
If suppressNotFoundErrors
comes out to be true
here, set this._suppressNotFoundErrors
to true
and then no need to pass the suppressNotFoundErrors
property in this.findElementAction
.
} catch (error) { | ||
if (error.name === 'NoSuchElementError') { | ||
return false; // Element does not exist | ||
} | ||
throw error; // Re-throw other errors for further handling | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In what cases will this catch
block be hit?
Because the webElement
in the new Element API is designed to never actually throw an error in normal cases (including when element is not found), I don't think try-catch
is required here. For other errors, they would just be thrown directly.
Is there any case that I am missing here in which this catch
block will be useful?
const common = require('../../../../common.js'); | ||
const Element = common.require('element/index.js'); | ||
|
||
describe('element().isPresent() command', function() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These tests are passing even if we set the suppressNotFoundErrors
property to false
in the isPresent.js
file. We must also include at least one test here which fails in such a case to make sure that our unit tests are testing what they are supposed to test, that we do not throw an error in case of isPresent()
command.
Thanks in advance for your contribution. Please follow the below steps in submitting a pull request, as it will help us with reviewing it quicker.
The isPresent command was quite tricky as there were few edge cases we had to solve.
The main one being when the element in not present, we don't want to show the Timeout Error if there is a isPresent command chained (which should ideally return false).
I solved this by checking if the next sibling of a
find
command is anelementIsPresent
command. It still takes 5 seconds to try to resolve the element.If this approach looks good, I can add some tests for this too.
Sanity for elements that are not present:
![Screenshot 2024-06-03 at 1 24 56 AM](https://private-user-images.githubusercontent.com/31622972/335894989-9b1cef3f-ad31-4487-8411-440433dac2f1.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjA3NTI1MzksIm5iZiI6MTcyMDc1MjIzOSwicGF0aCI6Ii8zMTYyMjk3Mi8zMzU4OTQ5ODktOWIxY2VmM2YtYWQzMS00NDg3LTg0MTEtNDQwNDMzZGFjMmYxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzEyVDAyNDM1OVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTIzMDUxMWI4NDJjYmQ0NzI4Njc0NmI2MjQyNDdkMmNhOTY2NWU5ZTBjOTc5MzFkNzMzYTEyZmUxZmJlNTAxYzEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.mTTmG8FLBvMiBXoUR_S-zf7DxyZQa3Zg5tUigQuvNtg)
examples/tests
directory of the project) and running them.ecosia.js
andduckDuckGo.js
are good examples to work with.features/my-new-feature
orissue/123-my-bugfix
);