我有以下程序:
using System;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Edge;
namespace ConsoleApplication1
{
static class Program
{
static void Main()
{
//var driver = new ChromeDriver();
var driver = new EdgeDriver();
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(20));
driver.Navigate().GoToUrl("http://www.cornelsen.de/shop/registrieren-lehrer");
driver.FindElement(By.Id("email")).SendKeys("[email protected]");
}
}
}
当我在Chrome或Edge以外的任何其他浏览器中运行此程序时,则正确输入了电子邮件地址。但是,如果我在Edge中尝试相同的操作,则会缺少“ @”字符。该字段仅显示“ dummyuser.de”。
知道我能做什么吗?
毕竟这并不像我想的那么容易。alecxe的答案有问题:
arguments[0].setAttribute('value', '...');
仅在您首次调用时有效。调用后element.Clear();
,它不再起作用。解决方法:arguments[0].value='...';
element.SendKeys();
,例如,未调用change事件。解决方法:通过JavaScript将字符串的第一部分发送到最后一个“禁止”字符,然后通过WebElement.SendKeys发送其余部分(按此特定顺序,如果您在SendKeys()之后对同一字段执行另一个JavaScript调用,则将如此)也不会发生更改事件)。我还意识到Edge中还有更多的“禁止”字符,例如重音或东欧字符(我是中欧)。2.的问题是最后一个字符可能是禁止的字符。在这种情况下,我附加一个空格。当然哪个会影响测试用例的行为,但是我没有其他想法。
完整的C#代码:
public static void SendKeys(this IWebElement element, TestTarget target, string text)
{
if (target.IsEdge)
{
int index = text.LastIndexOfAny(new[] { '@', 'Ł', 'ó', 'ź' }) + 1;
if (index > 0)
{
((IJavaScriptExecutor) target.Driver).ExecuteScript(
"arguments[0].value='" + text.Substring(0, index) + "';", element);
text = index == text.Length ? Keys.Space : text.Substring(index);
}
}
element.SendKeys(text);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句