【问题标题】:Selenium SendKey conflict with jquery inputmaskSelenium SendKey 与 jquery 输入掩码冲突
【发布时间】:2016-10-24 13:41:07
【问题描述】:

我正在使用 C# OpenQA.Selenium.Support.PageObjectsOpenQA.Selenium

在页面模型中,我尝试在具有输入掩码的文本框中输入电子邮件。

[FindsBy(How = How.Id, Using = "Email")]
private IWebElement _txtEmail;

public string Email
{
    set
    {
        _txtEmail.SendKeys(value);
    }
}

然后在 SendKey 之后,我得到了类似这个截图的东西。

当有输入掩码时,SendKeys 的正确方法是什么?

【问题讨论】:

    标签: c# selenium jquery-inputmask


    【解决方案1】:

    这里有一些问题,在许多情况下,Selenium 输入数据的速度超过了 JavaScript 处理数据的速度,从而导致了奇怪的行为。最好的办法是先单击元素,然后再等待。然后开始输入数据。

    Thread.Sleep(1000);
    

    如果这仍然不起作用,您可能需要考虑直接注入 JavaScript 来填充文本输入的值。


    更新

    这里是工作代码sn-p:

    public string Email
    {
        set
        {
            _txtEmail.Click();
            Thread.Sleep(10);
            _txtEmail.SendKeys(value);
        }
    }
    

    无需等待 1000 毫秒。

    【讨论】:

    • 谢谢。但是我该如何等待呢?
    • 我使用了Driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(1));。仍然混乱的输入掩码。
    • 让你先点击元素,让掩码有时间触发,而不是睡眠,然后输入数据,如果这不起作用,请使用 javascript 注入值。
    【解决方案2】:

    可能不是理想的解决方案,但它确实有效。

    NuGet 一个名为 Selenium.WebDriverBackedSelenium 的包。

    并使用以下代码 sn-p 代替SendKeys()

    public string Email
    {
        set
        {
            var selenium = new WebDriverBackedSelenium(driver, MyPageUrl);
            selenium.Start();
            selenium.Type("Email", value);
        }
    }
    

    但是必须有更好的方法。让我们在这里发布这个作为临时解决方案,同时等待更好的答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-20
      相关资源
      最近更新 更多