Skip to content

Commit 78cc853

Browse files
committed
Add tests
1 parent 2e3e426 commit 78cc853

File tree

1 file changed

+102
-1
lines changed

1 file changed

+102
-1
lines changed

dotnet/test/common/ExecutingJavascriptTest.cs

Lines changed: 102 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -480,7 +480,7 @@ public void ShouldBeAbleToExecuteABigChunkOfJavascriptCode()
480480
[IgnoreBrowser(Selenium.Browser.Safari, "Safari does not support Chrome DevTools Protocol")]
481481
public async Task ShouldBeAbleToPinJavascriptCodeAndExecuteRepeatedly()
482482
{
483-
IJavaScriptEngine jsEngine = new JavaScriptEngine(driver);
483+
using IJavaScriptEngine jsEngine = new JavaScriptEngine(driver);
484484

485485
driver.Url = xhtmlTestPage;
486486

@@ -500,6 +500,107 @@ public async Task ShouldBeAbleToPinJavascriptCodeAndExecuteRepeatedly()
500500
Throws.TypeOf<JavaScriptException>());
501501
}
502502

503+
[Test]
504+
[NeedsFreshDriver(IsCreatedAfterTest = true)]
505+
[IgnoreBrowser(Selenium.Browser.IE, "IE does not support Chrome DevTools Protocol")]
506+
[IgnoreBrowser(Selenium.Browser.Firefox, "Firefox does not support Chrome DevTools Protocol")]
507+
[IgnoreBrowser(Selenium.Browser.Safari, "Safari does not support Chrome DevTools Protocol")]
508+
public async Task ShouldBeAbleToAddInitializationScriptAndExecuteOnNewDocument()
509+
{
510+
const string ScriptValue = "alert('notice')";
511+
const string ScriptName = "AlertScript";
512+
513+
using IJavaScriptEngine jsEngine = new JavaScriptEngine(driver);
514+
515+
var initScript = await jsEngine.AddInitializationScript(ScriptName, ScriptValue);
516+
517+
Assert.That(initScript, Is.Not.Null);
518+
Assert.That(initScript.ScriptSource, Is.EqualTo(ScriptValue));
519+
Assert.That(initScript.ScriptName, Is.EqualTo(ScriptName));
520+
Assert.That(initScript.ScriptId, Is.Not.Null);
521+
522+
await jsEngine.StartEventMonitoring();
523+
524+
driver.Navigate().Refresh();
525+
driver.SwitchTo().Alert().Accept();
526+
527+
Assert.That(jsEngine.InitializationScripts, Does.Contain(initScript));
528+
await jsEngine.RemoveInitializationScript(ScriptName);
529+
530+
driver.Navigate().Refresh();
531+
Assert.That(() => driver.SwitchTo().Alert().Accept(), Throws.TypeOf<NoAlertPresentException>());
532+
533+
Assert.That(jsEngine.InitializationScripts, Does.Not.Contain(initScript));
534+
535+
await jsEngine.AddInitializationScript(ScriptName, ScriptValue);
536+
537+
driver.Navigate().Refresh();
538+
driver.SwitchTo().Alert().Accept();
539+
Assert.That(jsEngine.InitializationScripts, Does.Contain(initScript));
540+
541+
await jsEngine.ClearInitializationScripts();
542+
543+
driver.Navigate().Refresh();
544+
Assert.That(() => driver.SwitchTo().Alert().Accept(), Throws.TypeOf<NoAlertPresentException>());
545+
Assert.That(jsEngine.InitializationScripts, Is.Empty);
546+
547+
await jsEngine.AddInitializationScript(ScriptName, ScriptValue);
548+
driver.Navigate().Refresh();
549+
driver.SwitchTo().Alert().Accept();
550+
551+
await jsEngine.ClearAll();
552+
driver.Navigate().Refresh();
553+
Assert.That(() => driver.SwitchTo().Alert().Accept(), Throws.TypeOf<NoAlertPresentException>());
554+
Assert.That(jsEngine.InitializationScripts, Is.Empty);
555+
}
556+
557+
[Test]
558+
[NeedsFreshDriver(IsCreatedAfterTest = true)]
559+
[IgnoreBrowser(Selenium.Browser.IE, "IE does not support Chrome DevTools Protocol")]
560+
[IgnoreBrowser(Selenium.Browser.Firefox, "Firefox does not support Chrome DevTools Protocol")]
561+
[IgnoreBrowser(Selenium.Browser.Safari, "Safari does not support Chrome DevTools Protocol")]
562+
public async Task ShouldBeAbleToAddAndRemoveScriptCallbackBinding()
563+
{
564+
const string ScriptValue = "alert('Hello world')";
565+
const string ScriptName = "alert";
566+
567+
using IJavaScriptEngine jsEngine = new JavaScriptEngine(driver);
568+
569+
var executedBindings = new List<string>();
570+
jsEngine.JavaScriptCallbackExecuted += AddToList;
571+
await jsEngine.AddInitializationScript(ScriptName, ScriptValue);
572+
await jsEngine.StartEventMonitoring();
573+
574+
driver.Navigate().Refresh();
575+
driver.SwitchTo().Alert().Accept();
576+
577+
await jsEngine.AddScriptCallbackBinding(ScriptName);
578+
579+
driver.Navigate().Refresh();
580+
Assert.That(() => driver.SwitchTo().Alert().Accept(), Throws.TypeOf<NoAlertPresentException>());
581+
582+
Assert.That(executedBindings, Does.Contain(ScriptName));
583+
int oldCount = executedBindings.Count;
584+
driver.Navigate().Refresh();
585+
586+
Assert.That(executedBindings, Has.Count.GreaterThan(oldCount));
587+
Assert.That(jsEngine.ScriptCallbackBindings, Does.Contain(ScriptName));
588+
oldCount = executedBindings.Count;
589+
590+
await jsEngine.RemoveScriptCallbackBinding(ScriptName);
591+
Assert.That(jsEngine.ScriptCallbackBindings, Is.Empty);
592+
await jsEngine.AddScriptCallbackBinding(ScriptName);
593+
Assert.That(jsEngine.ScriptCallbackBindings, Does.Contain(ScriptName));
594+
await jsEngine.ClearScriptCallbackBindings();
595+
Assert.That(jsEngine.ScriptCallbackBindings, Is.Empty);
596+
597+
jsEngine.JavaScriptCallbackExecuted -= AddToList;
598+
driver.Navigate().Refresh();
599+
Assert.That(executedBindings, Has.Count.EqualTo(oldCount));
600+
601+
void AddToList(object sender, JavaScriptCallbackExecutedEventArgs e) => executedBindings.Add(e.BindingName);
602+
}
603+
503604
[Test]
504605
public void ShouldBeAbleToExecuteScriptAndReturnElementsList()
505606
{

0 commit comments

Comments
 (0)