-
-
Notifications
You must be signed in to change notification settings - Fork 136
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
Added an automated Selenium UI test for a small Zimit2 archive #1286
base: main
Are you sure you want to change the base?
Conversation
@Jaifroid I have not added test for android & ios page because i didn't know what test should i do, your suggestion will be appreciated 😅😃 Thanks! |
Thank you @THEBOSS0369. That's very useful. I would suggest adding a test that switches to the page that shows the Android and iOS store images, and verifying that both images have loaded correctly:
|
Hey @Jaifroid ! I have added the android and ios test as you asked me but there is a problem occurring when i am running the tests the i have tried by making the waititme 120000 , by removin cache but still this won't work. I don't understand what i am doing wrong i checked in the sw mode the image's alt is present and i have added the same in the code. Your help will be appreciated . Thanks! |
Thanks @THEBOSS0369. Sorry to hear about the error. It's tricky to get the assertions right with the timing. I'll take a look at the weekend, but in the meantime it's possibly the case that there's some error in selecting the images and checking their natural width. Adding some console logging to see what it's actually finding and what you are expecting it to find might help! |
OK, I ran this myself (in the Edge runner, adding the appropriate commands), and while watching the browser locally it's clear that the test never actually loads the page "Android & iOS App". It remains stuck on "Ear Training Practice" (see screenshot). You're not going to be able to verify the images on the "Android & iOS App" page unless you actually switch to it first! |
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.
Please see below for the steps to remedy the issue you're encountering.
@@ -27,6 +28,8 @@ async function loadFirefoxDriver () { | |||
// so we need to use the second one first | |||
const driver_for_gutenberg = await loadFirefoxDriver(); | |||
const driver_for_ray_charles = await loadFirefoxDriver(); | |||
const driver_for_tonedear = await loadFirefoxDriver(); |
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.
As the comment says above this block, the drivers need to be listed in reverse test order here, so that when the user runs the tests locally we see the Ray Charles first (which will be on top of the other windows). So please put the tonedear test above gutenberg in this list, and update the comment to reflect that there are three tests
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.
Done Sir
aa8674e
to
66aeef5
Compare
@Jaifroid Another problem occurring , when i try to navigate to Android Page it won't, i think this is happening because i didn't know the exact path for it at first i used this then i looked into the Then i think i can do that by link but The link for the server remains same Can you help me with this path problem if we get it fixed then every tests will pass correctly. |
@THEBOSS0369 Oh no, this app doesn't support navigating to a page by URL fragment. There are two ways to get to a particular page: either click on the link that you highlight in the screenshot (easiest), or search for it using the search bar. Also, remember that the links you're clicking on are in the iframe, not at the top level, so you have to switch to the iframe before finding the link and clicking it. Take a look at the code in the Ray Charles test to see how to switch to the iframe. This explains why you said you were finding 21 images in the landing page when in fact there are none! You were finding these images in the app itself, as you hadn't switched to the iframe containing the content. |
@Jaifroid Sirrr ! it worked now its navigating to andorid page although the images are still not found now i will try to fix that |
@Jaifroid Sir all The tests have passed . Does any thing else needed to be added in the test? If yes then do let me know. The comments in this image for tonedear tests will not be visible in the main tests i have commented it out. |
@THEBOSS0369 That's very good news! I don't think we need more tests. I'll review the new code as soon as I can, but in the meantime, you might want to clean it up, remove any excessive timeouts you previously added, etc. Once the spec is ready, you should add it to all the other runners in the folders under Oh, I see GitHub tests have failed. I'll re-run those to be sure it wasn't a timeout fluke. |
@Jaifroid I think the tests are failing because when it navigate to android page it asks me to authorize the author and i used to press that maybe that's causing error. |
@Jaifroid Yes this is happening due to the reason i told above i didn't clicked the trust source this time and tests failed. I don't know how to fix this one |
This is because you erased https://github.com/kiwix/kiwix-js/blob/main/tests/e2e/spec/legacy-ray_charles.e2e.spec.js#L125 (the setting "noPrompts=true") from the URL when loading the app. This was in your previous spec, but then you did a hard reset of your branch, and you erased it, so it's no longer in the commit history. That command prevents the security prompt from showing. All you need to do is copy the appropriate code block from the ray charles version of the test. Also, in future, try to avoid rewriting history in your PRs. It makes things difficult to review as well, because when you do a force push, I have to reset my copy of your PR instead of simply pulling a new commit! (Don't worry, everyone makes these kinds of mistakes with PRs when learning.) |
@Jaifroid Done Sir! Now all tests passes well without any issue. I'm waiting for these tests to pass then i will add the tests in all the files and remove any unnecessary time waits.
My apologies Sir i didn't knew force push can do this much damage. I will be careful from next time 😅 |
@Jaifroid Sir, The tests are failing in chrome i am not sure why its happening i tested in firefox it passes well. I just did same steps in |
Hmm looks like a timeout issue since it works on Windows in the same browsers. Let me re-run and see again. |
tests/e2e/spec/tonedear.e2e.spec.js
Outdated
const androidLink = await driver.findElement(By.css('a[href="android-ios-ear-training-app"]')); | ||
|
||
// Verify that the element is found | ||
// console.log('Android & iOS App link found:', androidLink !== null); |
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.
It might be useful to uncomment this, to check if the link is found.
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.
Done Sir
tests/e2e/spec/tonedear.e2e.spec.js
Outdated
// console.log('Android & iOS App link found:', androidLink !== null); | ||
|
||
// Scroll the element into view and click it | ||
await driver.executeScript('arguments[0].scrollIntoView(true);', androidLink); |
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.
I don't think the element needs to be scrolled into view. You could try without this (comment it out).
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.
Done Sir
tests/e2e/spec/tonedear.e2e.spec.js
Outdated
|
||
// Scroll the element into view and click it | ||
await driver.executeScript('arguments[0].scrollIntoView(true);', androidLink); | ||
await driver.wait(until.elementIsVisible(androidLink), 10000); // Wait until it's visible |
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.
If you've already found the element (androidLink), it doesn't seem necessary to wait for it to be visible, as you wouldn't have found it if it weren't already visible. You could also try commenting this out.
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.
Done Sir
tests/e2e/spec/tonedear.e2e.spec.js
Outdated
await driver.wait(until.elementIsVisible(androidLink), 10000); // Wait until it's visible | ||
await androidLink.click(); | ||
|
||
// Take a screenshot after clicking for debugging |
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.
Problem with this is that it's impossible to see screenshots in GitHub Actions AFAIK!
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.
Since we have videos taken on BrowserStack, I think this screenshotting probably isn't necessary. Best to remove it.
@Jaifroid ! This worked sir All the tests have passed. But sir one doubt if the github tests wasn't able to recognize the images in the linux tests then how it was able to verify for the windows test? Like is it some compatible issue or anything else. |
Very good news @THEBOSS0369! I guess it was a timing issue of some kind, but I need to check the verification method to be sure there isn't an issue with the assertions. The next step is for me to get the Browser Stack tests running against this PR (you can't do that, because you don't have access to the credentials). To do this, I'll make a dummy PR that has the same code as your PR, and this should then run on Browser Stack, and we can get feedback on whether it's passing also on old browsers. The fact that it's already passing on IE11 mode on Windows (Edge) implies that there shouldn't be any problem with other browsers, but it needs to be checked. I'll do this when I can in the next few days. |
@Jaifroid Got it Sir! If my work's done here then shall i find any other issue to work on or wait till this PR completes all its checks? |
Apologies for slowness here -- things have been manic at work. I finally pushed a dummy branch to get the BrowserStack tests to run. It failed the Safari test, and you can see a video of the failed test run here (it starts around 00:50): For comparison, here is a video of a different ZIM passing on that browser: The issue, I think, is that this version of Safari can only run in Restricted mode on BrowserStack, and the app informs this to the user with a dialogue box, which blocks the ZIM from loading. You need to test for and dismiss that dialogue box if present. You could just copy the code for that from the Gutenberg or Ray Charles test. |
@THEBOSS0369 We should add your test to a few more BrowserStack browsers. I suggest adding it to:
The reason for adding it selectively and in selected modes is because otherwise tests take too long to run if we test every spec in every mode. |
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.
Code is looking good so far. Please see some minor suggestions.
tests/e2e/spec/tonedear.e2e.spec.js
Outdated
} | ||
}); | ||
|
||
it('Should navigate from main page to Android & iOS section', async 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.
I think it would be better just to say "Navigate from ...." (without "Should").
tests/e2e/spec/tonedear.e2e.spec.js
Outdated
const androidLink = await driver.findElement(By.css('a[href="android-ios-ear-training-app"]')); | ||
|
||
// Verify that the element is found | ||
console.log('Android & iOS App link found:', androidLink !== null); |
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.
Rather than using console.log here, make this into a test and assert that androidLink !== null
. If it is null, then the test would fail. The formatting would be better in the log too.
tests/e2e/spec/tonedear.e2e.spec.js
Outdated
await driver.wait(until.elementIsVisible(androidLink), 10000); // Wait until it's visible | ||
await androidLink.click(); | ||
|
||
// Take a screenshot after clicking for debugging |
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.
Since we have videos taken on BrowserStack, I think this screenshotting probably isn't necessary. Best to remove it.
…different browsers
Signed-off-by: THEBOSS0369 <[email protected]>
@Jaifroid ! Sir I have done all the changes as you asked, i have run the tests on firefox all test has passed but i am on windows so i can't install safari to test the tests on it 😓. I have added the tests in all the files as you told me but in the |
Few Unnecessary files have come along with the commit I will remove them in few hours after coming back from college please don't mind them 😅😅 Edit : Sir i've removed those unnecessary files. |
This PR Fixes #1205
Hello Everyone!
Description
In this PR i have added an automated Selenium UI test for a small Zimit2 archive (used
tonedear.com_en_2024-09.zim
)The tests i have added are as follows :
Test
I have done all the necessary test
npm test
no issuetests-e2e-firefox
-> All tests Passed Below is the ssScreenshot for tests