Skip to content

Commit 495c3db

Browse files
committed
[dotnet] update implementation for submitting forms
1 parent db61990 commit 495c3db

2 files changed

Lines changed: 31 additions & 7 deletions

File tree

dotnet/src/webdriver/WebElement.cs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -633,11 +633,17 @@ public virtual void Submit()
633633
}
634634
else
635635
{
636-
IWebElement form = this.FindElement(By.XPath("./ancestor-or-self::form"));
637-
this.driver.ExecuteScript(
638-
"var e = arguments[0].ownerDocument.createEvent('Event');" +
639-
"e.initEvent('submit', true, true);" +
640-
"if (arguments[0].dispatchEvent(e)) { arguments[0].submit(); }", form);
636+
String script = "var form = arguments[0];\n" +
637+
"while (form.nodeName != \"FORM\" && form.parentNode) {\n" +
638+
" form = form.parentNode;\n" +
639+
"}\n" +
640+
"if (!form) { throw Error('Unable to find containing form element'); }\n" +
641+
"if (!form.ownerDocument) { throw Error('Unable to find owning document'); }\n" +
642+
"var e = form.ownerDocument.createEvent('Event');\n" +
643+
"e.initEvent('submit', true, true);\n" +
644+
"if (form.dispatchEvent(e)) { HTMLFormElement.prototype.submit.call(form) }\n";
645+
646+
this.driver.ExecuteScript(script, this);
641647
}
642648
}
643649

dotnet/test/common/FormHandlingTests.cs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,28 @@ public void ShouldSubmitAFormWhenAnyElementWithinThatFormIsSubmitted()
6060
}
6161

6262
[Test]
63-
public void ShouldNotBeAbleToSubmitAFormThatDoesNotExist()
63+
public void ShouldSubmitAFormWithIdSubmit()
6464
{
6565
driver.Url = formsPage;
66-
Assert.That(() => driver.FindElement(By.Name("SearchableText")).Submit(), Throws.InstanceOf<NoSuchElementException>());
66+
driver.FindElement(By.Id("submit")).Submit();
67+
WaitFor(TitleToBe("We Arrive Here"), "Browser title is not 'We Arrive Here'");
68+
Assert.AreEqual(driver.Title, "We Arrive Here");
69+
}
70+
71+
[Test]
72+
public void ShouldSubmitAFormWithNameSubmit()
73+
{
74+
driver.Url = formsPage;
75+
driver.FindElement(By.Name("submit")).Submit();
76+
WaitFor(TitleToBe("We Arrive Here"), "Browser title is not 'We Arrive Here'");
77+
Assert.AreEqual(driver.Title, "We Arrive Here");
78+
}
79+
80+
[Test]
81+
public void ShouldNotBeAbleToSubmitAnInputOutsideAForm()
82+
{
83+
driver.Url = formsPage;
84+
Assert.That(() => driver.FindElement(By.Name("SearchableText")).Submit(), Throws.InstanceOf<WebDriverException>());
6785
}
6886

6987
[Test]

0 commit comments

Comments
 (0)