E2E tests for navigation+preventDefault
This commit is contained in:
parent
6f8b31bdb1
commit
0d30083aab
|
|
@ -455,6 +455,49 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests
|
||||||
Browser.Equal(0, () => BrowserScrollY);
|
Browser.Equal(0, () => BrowserScrollY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Theory]
|
||||||
|
[InlineData("external", "ancestor")]
|
||||||
|
[InlineData("external", "target")]
|
||||||
|
[InlineData("external", "descendant")]
|
||||||
|
[InlineData("internal", "ancestor")]
|
||||||
|
[InlineData("internal", "target")]
|
||||||
|
[InlineData("internal", "descendant")]
|
||||||
|
public void PreventDefault_CanBlockNavigation(string navigationType, string whereToPreventDefault)
|
||||||
|
{
|
||||||
|
SetUrlViaPushState("/PreventDefaultCases");
|
||||||
|
var app = Browser.MountTestComponent<TestRouter>();
|
||||||
|
var preventDefaultToggle = app.FindElement(By.CssSelector($".prevent-default .{whereToPreventDefault}"));
|
||||||
|
var linkElement = app.FindElement(By.Id($"{navigationType}-navigation"));
|
||||||
|
var counterButton = app.FindElement(By.ClassName("counter-button"));
|
||||||
|
if (whereToPreventDefault == "descendant")
|
||||||
|
{
|
||||||
|
// We're testing clicks on the link's descendant element
|
||||||
|
linkElement = linkElement.FindElement(By.TagName("span"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// If preventDefault is on, then navigation does not occur
|
||||||
|
preventDefaultToggle.Click();
|
||||||
|
linkElement.Click();
|
||||||
|
|
||||||
|
// We check that no navigation ocurred by observing that we can still use the counter
|
||||||
|
counterButton.Click();
|
||||||
|
Browser.Equal("Counter: 1", () => counterButton.Text);
|
||||||
|
|
||||||
|
// Now if we toggle preventDefault back off, then navigation will occur
|
||||||
|
preventDefaultToggle.Click();
|
||||||
|
linkElement.Click();
|
||||||
|
|
||||||
|
if (navigationType == "external")
|
||||||
|
{
|
||||||
|
Browser.Equal("about:blank", () => Browser.Url);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Browser.Equal("This is another page.", () => app.FindElement(By.Id("test-info")).Text);
|
||||||
|
AssertHighlightedLinks("Other", "Other with base-relative URL (matches all)");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private long BrowserScrollY
|
private long BrowserScrollY
|
||||||
{
|
{
|
||||||
get => (long)((IJavaScriptExecutor)Browser).ExecuteScript("return window.scrollY");
|
get => (long)((IJavaScriptExecutor)Browser).ExecuteScript("return window.scrollY");
|
||||||
|
|
|
||||||
|
|
@ -9,13 +9,13 @@
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p __internal_preventDefault_onclick="@ancestorPreventDefault">
|
<p __internal_preventDefault_onclick="@ancestorPreventDefault">
|
||||||
<a href="about:blank" __internal_preventDefault_onclick="@targetPreventDefault">
|
<a id="external-navigation" href="about:blank" __internal_preventDefault_onclick="@targetPreventDefault">
|
||||||
External navigation
|
External navigation
|
||||||
<span __internal_preventDefault_onclick="@descendantPreventDefault">[Descendant element]</span>
|
<span __internal_preventDefault_onclick="@descendantPreventDefault">[Descendant element]</span>
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
<p __internal_preventDefault_onclick="@ancestorPreventDefault">
|
<p __internal_preventDefault_onclick="@ancestorPreventDefault">
|
||||||
<a href="Other" __internal_preventDefault_onclick="@targetPreventDefault">
|
<a id="internal-navigation" href="Other" __internal_preventDefault_onclick="@targetPreventDefault">
|
||||||
Internal navigation
|
Internal navigation
|
||||||
<span __internal_preventDefault_onclick="@descendantPreventDefault">[Descendant element]</span>
|
<span __internal_preventDefault_onclick="@descendantPreventDefault">[Descendant element]</span>
|
||||||
</a>
|
</a>
|
||||||
|
|
@ -28,7 +28,7 @@
|
||||||
<label><input class="descendant" type="checkbox" @bind="descendantPreventDefault" /> Descendant</label>
|
<label><input class="descendant" type="checkbox" @bind="descendantPreventDefault" /> Descendant</label>
|
||||||
|
|
||||||
@* So we can assert that navigation didn't happen *@
|
@* So we can assert that navigation didn't happen *@
|
||||||
<button class="counter" @onclick="@(() => counter++)">Counter: @counter</button>
|
<button class="counter-button" @onclick="@(() => counter++)">Counter: @counter</button>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue