Selenium SendKey 与 jquery 输入掩码冲突

Posted

技术标签:

【中文标题】Selenium SendKey 与 jquery 输入掩码冲突【英文标题】:Selenium SendKey conflict with jquery inputmask 【发布时间】: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 的正确方法是什么?

【问题讨论】:

【参考方案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);
    

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

【讨论】:

以上是关于Selenium SendKey 与 jquery 输入掩码冲突的主要内容,如果未能解决你的问题,请参考以下文章

如何从用于使用 Selenium 填写表单的 chrome 自动填充框中选择值

将 SendKey 发送到 Citrix 应用程序

Appium脚本:sendkey(封装capability)

C# .net sendkeys 不使用 SendKey() 而是使用挂钩

CANoe DLL编程——SendKey DLL的CANoe应用

tmux的sendkey的键盘对应表