Skip to content

Commit 45d06b9

Browse files
tvaseninbarancev
authored andcommitted
WDBS: safe check for window.localStorage
Sometimes access to window.localStorage property is prohibited, so the check should be wrapped into try/catch. Fixes regression introduced in 80ccbb8 and 2262635
1 parent af6f5f3 commit 45d06b9

File tree

4 files changed

+36
-12
lines changed

4 files changed

+36
-12
lines changed

dotnet/src/webdriverbackedselenium/Internal/AlertOverride.cs

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ public AlertOverride(IWebDriver driver)
2727
public void ReplaceAlertMethod()
2828
{
2929
((IJavaScriptExecutor)this.driver).ExecuteScript(
30-
"if (window.localStorage) { " +
30+
"var canUseLocalStorage = false; " +
31+
"try { canUseLocalStorage = !!window.localStorage; } catch(ex) { /* probe failed */ } " +
32+
"if (canUseLocalStorage) { " +
3133
" window.localStorage.setItem('__webdriverAlerts', JSON.stringify([])); " +
3234
" window.alert = function(msg) { " +
3335
" var alerts = JSON.parse(window.localStorage.getItem('__webdriverAlerts')); " +
@@ -69,7 +71,9 @@ public void ReplaceAlertMethod()
6971
public string GetNextAlert()
7072
{
7173
string result = (string)((IJavaScriptExecutor)this.driver).ExecuteScript(
72-
"if (window.localStorage) { " +
74+
"var canUseLocalStorage = false; " +
75+
"try { canUseLocalStorage = !!window.localStorage; } catch(ex) { /* probe failed */ } " +
76+
"if (canUseLocalStorage) { " +
7377
" if (!('__webdriverAlerts' in window.localStorage)) { return null } " +
7478
" var alerts = JSON.parse(window.localStorage.getItem('__webdriverAlerts')); " +
7579
" if (! alerts) { return null } " +
@@ -101,7 +105,9 @@ public bool IsAlertPresent()
101105
{
102106
bool alertPresent = false;
103107
object alertResult = ((IJavaScriptExecutor)this.driver).ExecuteScript(
104-
"if (window.localStorage) { " +
108+
"var canUseLocalStorage = false; " +
109+
"try { canUseLocalStorage = !!window.localStorage; } catch(ex) { /* probe failed */ } " +
110+
"if (canUseLocalStorage) { " +
105111
" if (!('__webdriverAlerts' in window.localStorage)) { return false } " +
106112
" var alerts = JSON.parse(window.localStorage.getItem('__webdriverAlerts')); " +
107113
" return alerts && alerts.length > 0; " +
@@ -124,7 +130,9 @@ public bool IsAlertPresent()
124130
public string GetNextConfirmation()
125131
{
126132
string result = (string)((IJavaScriptExecutor)this.driver).ExecuteScript(
127-
"if (window.localStorage) { " +
133+
"var canUseLocalStorage = false; " +
134+
"try { canUseLocalStorage = !!window.localStorage; } catch(ex) { /* probe failed */ } " +
135+
"if (canUseLocalStorage) { " +
128136
" if (!('__webdriverConfirms' in window.localStorage)) { return null } " +
129137
" var confirms = JSON.parse(window.localStorage.getItem('__webdriverConfirms')); " +
130138
" if (! confirms) { return null } " +
@@ -154,7 +162,9 @@ public bool IsConfirmationPresent()
154162
{
155163
bool confirmPresent = false;
156164
object confirmResult = ((IJavaScriptExecutor)this.driver).ExecuteScript(
157-
"if (window.localStorage) { " +
165+
"var canUseLocalStorage = false; " +
166+
"try { canUseLocalStorage = !!window.localStorage; } catch(ex) { /* probe failed */ } " +
167+
"if (canUseLocalStorage) { " +
158168
" if (!('__webdriverConfirms' in window.localStorage)) { return false } " +
159169
" var confirms = JSON.parse(window.localStorage.getItem('__webdriverConfirms')); " +
160170
" return confirms && confirms.length > 0; " +

dotnet/src/webdriverbackedselenium/Internal/SeleniumEmulation/SetNextConfirmationState.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@ public SetNextConfirmationState(bool result)
3232
protected override object HandleSeleneseCommand(IWebDriver driver, string locator, string value)
3333
{
3434
((IJavaScriptExecutor)driver).ExecuteScript(
35-
"if (window.localStorage) { " +
35+
"var canUseLocalStorage = false; " +
36+
"try { canUseLocalStorage = !!window.localStorage; } catch(ex) { /* probe failed */ } " +
37+
"if (canUseLocalStorage) { " +
3638
" window.localStorage.setItem('__webdriverNextConfirm', JSON.stringify(arguments[0])); " +
3739
"} else { " +
3840
" window.__webdriverNextConfirm = arguments[0];" +

java/client/src/com/thoughtworks/selenium/webdriven/commands/AlertOverride.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@ public void replaceAlertMethod(WebDriver driver) {
3737
}
3838

3939
((JavascriptExecutor) driver).executeScript(
40-
"if (window.localStorage) { " +
40+
"var canUseLocalStorage = false; " +
41+
"try { canUseLocalStorage = !!window.localStorage; } catch(ex) { /* probe failed */ } " +
42+
"if (canUseLocalStorage) { " +
4143
" window.localStorage.setItem('__webdriverAlerts', JSON.stringify([])); " +
4244
" window.alert = function(msg) { " +
4345
" var alerts = JSON.parse(window.localStorage.getItem('__webdriverAlerts')); " +
@@ -80,7 +82,9 @@ private void checkOverridesEnabled(){
8082
public String getNextAlert(WebDriver driver) {
8183
checkOverridesEnabled();
8284
String result = (String) ((JavascriptExecutor) driver).executeScript(
83-
"if (window.localStorage) { " +
85+
"var canUseLocalStorage = false; " +
86+
"try { canUseLocalStorage = !!window.localStorage; } catch(ex) { /* probe failed */ } " +
87+
"if (canUseLocalStorage) { " +
8488
" if (!('__webdriverAlerts' in window.localStorage)) { return null } " +
8589
" var alerts = JSON.parse(window.localStorage.getItem('__webdriverAlerts')); " +
8690
" if (! alerts) { return null } " +
@@ -106,7 +110,9 @@ public String getNextAlert(WebDriver driver) {
106110
public boolean isAlertPresent(WebDriver driver) {
107111
checkOverridesEnabled();
108112
return Boolean.TRUE.equals(((JavascriptExecutor) driver).executeScript(
109-
"if (window.localStorage) { " +
113+
"var canUseLocalStorage = false; " +
114+
"try { canUseLocalStorage = !!window.localStorage; } catch(ex) { /* probe failed */ } " +
115+
"if (canUseLocalStorage) { " +
110116
" if (!('__webdriverAlerts' in window.localStorage)) { return false } " +
111117
" var alerts = JSON.parse(window.localStorage.getItem('__webdriverAlerts')); " +
112118
" return alerts && alerts.length > 0; " +
@@ -119,7 +125,9 @@ public boolean isAlertPresent(WebDriver driver) {
119125
public String getNextConfirmation(WebDriver driver) {
120126
checkOverridesEnabled();
121127
String result = (String) ((JavascriptExecutor) driver).executeScript(
122-
"if (window.localStorage) { " +
128+
"var canUseLocalStorage = false; " +
129+
"try { canUseLocalStorage = !!window.localStorage; } catch(ex) { /* probe failed */ } " +
130+
"if (canUseLocalStorage) { " +
123131
" if (!('__webdriverConfirms' in window.localStorage)) { return null } " +
124132
" var confirms = JSON.parse(window.localStorage.getItem('__webdriverConfirms')); " +
125133
" if (! confirms) { return null } " +
@@ -143,7 +151,9 @@ public String getNextConfirmation(WebDriver driver) {
143151
public boolean isConfirmationPresent(WebDriver driver) {
144152
checkOverridesEnabled();
145153
return Boolean.TRUE.equals(((JavascriptExecutor) driver).executeScript(
146-
"if (window.localStorage) { " +
154+
"var canUseLocalStorage = false; " +
155+
"try { canUseLocalStorage = !!window.localStorage; } catch(ex) { /* probe failed */ } " +
156+
"if (canUseLocalStorage) { " +
147157
" if (!('__webdriverConfirms' in window.localStorage)) { return false } " +
148158
" var confirms = JSON.parse(window.localStorage.getItem('__webdriverConfirms')); " +
149159
" return confirms && confirms.length > 0; " +

java/client/src/com/thoughtworks/selenium/webdriven/commands/SetNextConfirmationState.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ public SetNextConfirmationState(boolean result) {
3131
@Override
3232
protected Void handleSeleneseCommand(WebDriver driver, String locator, String value) {
3333
((JavascriptExecutor) driver).executeScript(
34-
"if (window.localStorage) { " +
34+
"var canUseLocalStorage = false; " +
35+
"try { canUseLocalStorage = !!window.localStorage; } catch(ex) { /* probe failed */ } " +
36+
"if (canUseLocalStorage) { " +
3537
" window.localStorage.setItem('__webdriverNextConfirm', JSON.stringify(arguments[0])); " +
3638
"} else { " +
3739
" window.__webdriverNextConfirm = arguments[0];" +

0 commit comments

Comments
 (0)