Skip to content
代码片段 群组 项目
未验证 提交 1527e49e 编辑于 作者: Steve Sanderson's avatar Steve Sanderson 提交者: GitHub
浏览文件

Make InputDateInteractsWithEditContext_NullableDateTimeOffset more reliable (#13648)

上级 03ba5738
No related branches found
No related tags found
无相关合并请求
...@@ -68,7 +68,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests ...@@ -68,7 +68,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests
display = Browser.FindElement(By.Id("input_type_text_datetime_value")); display = Browser.FindElement(By.Id("input_type_text_datetime_value"));
Browser.Equal(new DateTime(1985, 3, 4).ToString(cultureInfo), () => display.Text); Browser.Equal(new DateTime(1985, 3, 4).ToString(cultureInfo), () => display.Text);
ReplaceText(input, new DateTime(2000, 1, 2).ToString(cultureInfo)); input.ReplaceText(new DateTime(2000, 1, 2).ToString(cultureInfo));
input.SendKeys("\t"); input.SendKeys("\t");
Browser.Equal(new DateTime(2000, 1, 2).ToString(cultureInfo), () => display.Text); Browser.Equal(new DateTime(2000, 1, 2).ToString(cultureInfo), () => display.Text);
...@@ -77,7 +77,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests ...@@ -77,7 +77,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests
display = Browser.FindElement(By.Id("input_type_text_datetimeoffset_value")); display = Browser.FindElement(By.Id("input_type_text_datetimeoffset_value"));
Browser.Equal(new DateTimeOffset(new DateTime(1985, 3, 4)).ToString(cultureInfo), () => display.Text); Browser.Equal(new DateTimeOffset(new DateTime(1985, 3, 4)).ToString(cultureInfo), () => display.Text);
ReplaceText(input, new DateTimeOffset(new DateTime(2000, 1, 2)).ToString(cultureInfo)); input.ReplaceText(new DateTimeOffset(new DateTime(2000, 1, 2)).ToString(cultureInfo));
input.SendKeys("\t"); input.SendKeys("\t");
Browser.Equal(new DateTimeOffset(new DateTime(2000, 1, 2)).ToString(cultureInfo), () => display.Text); Browser.Equal(new DateTimeOffset(new DateTime(2000, 1, 2)).ToString(cultureInfo), () => display.Text);
} }
...@@ -137,7 +137,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests ...@@ -137,7 +137,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests
Browser.Equal(new DateTime(1985, 3, 4).ToString(cultureInfo), () => display.Text); Browser.Equal(new DateTime(1985, 3, 4).ToString(cultureInfo), () => display.Text);
Browser.Equal(new DateTime(1985, 3, 4).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture), () => input.GetAttribute("value")); Browser.Equal(new DateTime(1985, 3, 4).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture), () => input.GetAttribute("value"));
ReplaceText(extraInput, new DateTime(2000, 1, 2).ToString(cultureInfo)); extraInput.ReplaceText(new DateTime(2000, 1, 2).ToString(cultureInfo));
extraInput.SendKeys("\t"); extraInput.SendKeys("\t");
Browser.Equal(new DateTime(2000, 1, 2).ToString(cultureInfo), () => display.Text); Browser.Equal(new DateTime(2000, 1, 2).ToString(cultureInfo), () => display.Text);
Browser.Equal(new DateTime(2000, 1, 2).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture), () => input.GetAttribute("value")); Browser.Equal(new DateTime(2000, 1, 2).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture), () => input.GetAttribute("value"));
...@@ -149,7 +149,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests ...@@ -149,7 +149,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests
Browser.Equal(new DateTimeOffset(new DateTime(1985, 3, 4)).ToString(cultureInfo), () => display.Text); Browser.Equal(new DateTimeOffset(new DateTime(1985, 3, 4)).ToString(cultureInfo), () => display.Text);
Browser.Equal(new DateTimeOffset(new DateTime(1985, 3, 4)).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture), () => input.GetAttribute("value")); Browser.Equal(new DateTimeOffset(new DateTime(1985, 3, 4)).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture), () => input.GetAttribute("value"));
ReplaceText(extraInput, new DateTimeOffset(new DateTime(2000, 1, 2)).ToString(cultureInfo)); extraInput.ReplaceText(new DateTimeOffset(new DateTime(2000, 1, 2)).ToString(cultureInfo));
extraInput.SendKeys("\t"); extraInput.SendKeys("\t");
Browser.Equal(new DateTimeOffset(new DateTime(2000, 1, 2)).ToString(cultureInfo), () => display.Text); Browser.Equal(new DateTimeOffset(new DateTime(2000, 1, 2)).ToString(cultureInfo), () => display.Text);
Browser.Equal(new DateTimeOffset(new DateTime(2000, 1, 2)).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture), () => input.GetAttribute("value")); Browser.Equal(new DateTimeOffset(new DateTime(2000, 1, 2)).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture), () => input.GetAttribute("value"));
...@@ -194,7 +194,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests ...@@ -194,7 +194,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests
Browser.Equal(new DateTime(1985, 3, 4).ToString(cultureInfo), () => display.Text); Browser.Equal(new DateTime(1985, 3, 4).ToString(cultureInfo), () => display.Text);
Browser.Equal(new DateTime(1985, 3, 4).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture), () => input.GetAttribute("value")); Browser.Equal(new DateTime(1985, 3, 4).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture), () => input.GetAttribute("value"));
ReplaceText(extraInput, new DateTime(2000, 1, 2).ToString(cultureInfo)); extraInput.ReplaceText(new DateTime(2000, 1, 2).ToString(cultureInfo));
extraInput.SendKeys("\t"); extraInput.SendKeys("\t");
Browser.Equal(new DateTime(2000, 1, 2).ToString(cultureInfo), () => display.Text); Browser.Equal(new DateTime(2000, 1, 2).ToString(cultureInfo), () => display.Text);
Browser.Equal(new DateTime(2000, 1, 2).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture), () => input.GetAttribute("value")); Browser.Equal(new DateTime(2000, 1, 2).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture), () => input.GetAttribute("value"));
...@@ -206,21 +206,12 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests ...@@ -206,21 +206,12 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests
Browser.Equal(new DateTimeOffset(new DateTime(1985, 3, 4)).ToString(cultureInfo), () => display.Text); Browser.Equal(new DateTimeOffset(new DateTime(1985, 3, 4)).ToString(cultureInfo), () => display.Text);
Browser.Equal(new DateTimeOffset(new DateTime(1985, 3, 4)).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture), () => input.GetAttribute("value")); Browser.Equal(new DateTimeOffset(new DateTime(1985, 3, 4)).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture), () => input.GetAttribute("value"));
ReplaceText(extraInput, new DateTimeOffset(new DateTime(2000, 1, 2)).ToString(cultureInfo)); extraInput.ReplaceText(new DateTimeOffset(new DateTime(2000, 1, 2)).ToString(cultureInfo));
extraInput.SendKeys("\t"); extraInput.SendKeys("\t");
Browser.Equal(new DateTimeOffset(new DateTime(2000, 1, 2)).ToString(cultureInfo), () => display.Text); Browser.Equal(new DateTimeOffset(new DateTime(2000, 1, 2)).ToString(cultureInfo), () => display.Text);
Browser.Equal(new DateTimeOffset(new DateTime(2000, 1, 2)).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture), () => input.GetAttribute("value")); Browser.Equal(new DateTimeOffset(new DateTime(2000, 1, 2)).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture), () => input.GetAttribute("value"));
} }
// see: https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/214
//
// Calling Clear() can trigger onchange, which will revert the value to its default.
private static void ReplaceText(IWebElement element, string text)
{
element.SendKeys(Keys.Control + "a");
element.SendKeys(text);
}
private void SetCulture(string culture) private void SetCulture(string culture)
{ {
var selector = new SelectElement(Browser.FindElement(By.Id("culture-selector"))); var selector = new SelectElement(Browser.FindElement(By.Id("culture-selector")));
......
...@@ -11,7 +11,7 @@ using OpenQA.Selenium; ...@@ -11,7 +11,7 @@ using OpenQA.Selenium;
using OpenQA.Selenium.Support.UI; using OpenQA.Selenium.Support.UI;
using System; using System;
using System.Linq; using System.Linq;
using System.Security.Cryptography; using System.Text.Json;
using System.Threading.Tasks; using System.Threading.Tasks;
using Xunit; using Xunit;
using Xunit.Abstractions; using Xunit.Abstractions;
...@@ -196,27 +196,26 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests ...@@ -196,27 +196,26 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests
// Validates on edit // Validates on edit
Browser.Equal("valid", () => renewalDateInput.GetAttribute("class")); Browser.Equal("valid", () => renewalDateInput.GetAttribute("class"));
renewalDateInput.SendKeys("01/01/2000\t"); renewalDateInput.ReplaceText("01/01/2000\t");
Browser.Equal("modified valid", () => renewalDateInput.GetAttribute("class")); Browser.Equal("modified valid", () => renewalDateInput.GetAttribute("class"));
// Can become invalid // Can become invalid
renewalDateInput.SendKeys("0/0/0"); renewalDateInput.ReplaceText("0/0/0");
Browser.Equal("modified invalid", () => renewalDateInput.GetAttribute("class")); Browser.Equal("modified invalid", () => renewalDateInput.GetAttribute("class"));
Browser.Equal(new[] { "The RenewalDate field must be a date." }, messagesAccessor); Browser.Equal(new[] { "The RenewalDate field must be a date." }, messagesAccessor);
// Empty is invalid, because it's not nullable // Empty is invalid, because it's not nullable
renewalDateInput.SendKeys($"{Keys.Backspace}\t{Keys.Backspace}\t{Keys.Backspace}\t"); renewalDateInput.ReplaceText($"{Keys.Backspace}");
Browser.Equal("modified invalid", () => renewalDateInput.GetAttribute("class")); Browser.Equal("modified invalid", () => renewalDateInput.GetAttribute("class"));
Browser.Equal(new[] { "The RenewalDate field must be a date." }, messagesAccessor); Browser.Equal(new[] { "The RenewalDate field must be a date." }, messagesAccessor);
// Can become valid // Can become valid
renewalDateInput.SendKeys("01/01/01\t"); renewalDateInput.ReplaceText("01/01/01");
Browser.Equal("modified valid", () => renewalDateInput.GetAttribute("class")); Browser.Equal("modified valid", () => renewalDateInput.GetAttribute("class"));
Browser.Empty(messagesAccessor); Browser.Empty(messagesAccessor);
} }
[Fact] [Fact]
[Flaky("https://github.com/aspnet/AspNetCore-Internal/issues/2511", FlakyOn.All)]
public void InputDateInteractsWithEditContext_NullableDateTimeOffset() public void InputDateInteractsWithEditContext_NullableDateTimeOffset()
{ {
var appElement = MountTestComponent<TypicalValidationComponent>(); var appElement = MountTestComponent<TypicalValidationComponent>();
...@@ -229,8 +228,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests ...@@ -229,8 +228,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests
Browser.Equal("modified valid", () => expiryDateInput.GetAttribute("class")); Browser.Equal("modified valid", () => expiryDateInput.GetAttribute("class"));
// Can become invalid // Can become invalid
expiryDateInput.Clear(); expiryDateInput.ReplaceText("111111111");
expiryDateInput.SendKeys("111111111");
Browser.Equal("modified invalid", () => expiryDateInput.GetAttribute("class")); Browser.Equal("modified invalid", () => expiryDateInput.GetAttribute("class"));
Browser.Equal(new[] { "The OptionalExpiryDate field must be a date." }, messagesAccessor); Browser.Equal(new[] { "The OptionalExpiryDate field must be a date." }, messagesAccessor);
......
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
namespace OpenQA.Selenium
{
public static class WebElementExtensions
{
// see: https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/214
//
// Calling Clear() can trigger onchange, which will revert the value to its default.
public static void ReplaceText(this IWebElement element, string text)
{
element.SendKeys(Keys.Control + "a");
element.SendKeys(text);
}
}
}
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册