-
-
Notifications
You must be signed in to change notification settings - Fork 8.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
[Java] Add Locale.ROOT to avoid port formatting issues for all drivers #15121
Changes from all commits
fe86936
b7b05d2
6685d7b
7169a27
eef4b73
6072c95
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -147,24 +147,21 @@ void testPersistentHoverCanBeTurnedOff() throws Exception { | |
|
||
@Test | ||
@NoDriverBeforeTest | ||
void shouldThrowNumberFormatException() { | ||
Locale arabicLocale = new Locale("ar", "EG"); | ||
Locale.setDefault(arabicLocale); | ||
void shouldLaunchSuccessfullyWithArabicDate() { | ||
try { | ||
Locale arabicLocale = new Locale("ar", "EG"); | ||
Locale.setDefault(arabicLocale); | ||
|
||
int port = PortProber.findFreePort(); | ||
InternetExplorerDriverService.Builder builder = new InternetExplorerDriverService.Builder(); | ||
builder.usingPort(port); | ||
int port = PortProber.findFreePort(); | ||
InternetExplorerDriverService.Builder builder = new InternetExplorerDriverService.Builder(); | ||
builder.usingPort(port); | ||
builder.build(); | ||
|
||
assertThatExceptionOfType(NumberFormatException.class) | ||
.isThrownBy(builder::build) | ||
.withMessage( | ||
"Couldn't format the port numbers because the System Language is arabic: \"" | ||
+ String.format("--port=%d", port) | ||
+ "\", please make sure to add the required arguments \"-Duser.language=en" | ||
+ " -Duser.region=US\" to your JVM, for more info please visit :\n" | ||
+ " https://www.selenium.dev/documentation/webdriver/browsers/"); | ||
|
||
Locale.setDefault(Locale.US); | ||
} catch (Exception e) { | ||
throw e; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Why do we need this "catch+throw" block? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It's needed In case the test failed for any reason then we will throw the exception and at the finally block we will revert the locale default back to English regardless That's why it's following Try-catch with finally There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @MustafaAgamy In this case, please use It doesn't make sense to catch and throw an exception without handling it. |
||
} finally { | ||
Locale.setDefault(Locale.US); | ||
} | ||
} | ||
|
||
private WebDriver newIeDriver() { | ||
|
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 this this test is not needed at all.
It should be removed.
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 disccussed earlier this test is using arabic as a unit test for port formatting logic
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.
@MustafaAgamy
The line
Locale.setDefault(arabicLocale)
changes the global JVM state which may affect other tests (especially when they are running in parallel).This test only checks that
ChromeDriverService.Builder
works with Arabic locale.Why only this class?
Actually, we need to check that the whole Selenium Webdriver works with Arabic locale.
Instead of this single test, we should run ALL tests with Arabic locale.
For example, in Selenide we run all tests with Turkish locale for the same reason:
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.
So what's the suggestion here?
Have some kind of Environement Properties set to run all tests with Arabic language?
You see, the thing is you don't actually need to run all tests against arabic. You just need to test if the builder will be able to build the driver instance successfully while the System language is arabic, that's pretty much it (That's the AOI - Area of Impact - for this unit test)
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.
We don't even need any environment variables. We can just add these parameters to Bazel script to always run tests with Arabic locale.
(There is a more complex option - run tests with multiple "special" locales: Arabic, Turkish etc. But it's probably overkill.)
P.S. Yes, I see this is AOI of this test. And this is the wrong AOI.