发送到文本框时,SendKeys()方法将忽略某些字符

时间:2019-02-19 15:07:34

标签: selenium selenium-webdriver selenium-chromedriver

编辑:我已经找到了解决该问题的方法:下面的解决方法

自从我将Selenium Server安装转移到另一台机器以来,我一直遇到一个有趣的问题。

每当我在这台新计算机上运行测试时,登录测试就不再起作用。

经过调查,我发现密码字段填充的值不正确(因此测试失败)。

我正在尝试执行以下操作:

_passWordTextBox.Clear();
_passWordTextBox.SendKeys("!!ä{dasd$352310!!!\\_XY>èà$£<?^^");

这是在这些行之后填充字段的方式:

enter image description here

您可能会注意到,唯一未正确发送的字符是“!”。字符。

它一直可以在我的另一台机器上运行,并且其他几个可疑候选对象(例如$éà<)也可以正确发送。

我一直在研究计算机运行和执行测试的服务器之间的文化差异,但是我一直无法找到结论性的东西。

我尝试了以下操作:

密码字符串(如代码中所定义):

  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

这是最终被写入文件内部的内容:

"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\  _ abcdefghijklmnopqrstuvwxyz{|}

已识别的无效字符:

!]^`~

我还在应用程序的其他字段(没有经过passowrd或电子邮件验证)中尝试过,例如Description字段,但我得到了相同的结果:这几个字符没有被按下。

我试图查看命令是否已正确发送到selenium服务器,因为它很明显

08:05:35.850 DEBUG [ReverseProxyHandler.execute] - To upstream: {"value":["!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~?"]}

这意味着服务器正确接收了该命令,但由于某种原因驱动程序或服务器无法正常执行。

3 个答案:

答案 0 :(得分:0)

尝试一下:

_passWordTextBox.SendKeys(@"!!ä{dasd$352310!!!\\_XY>èà$£<?^^");

也许是针对来自字段的验证。

答案 1 :(得分:0)

您可以尝试使用剪贴板:

public static void SendValueFromClipboard(this IWebElement txtField, string value)
        {
            Clipboard.SetText(value);
            txtField.SendKeys(OpenQA.Selenium.Keys.Control + "v");
        }

这是用C#编写的,您需要使用自己的语言重写它。

答案 2 :(得分:0)

查看了多个系统设置后,我发现我的驾驶和执行机都添加了相同的区域设置(格式:法语(瑞士),键盘:法语(瑞士),但我没有再看。 在摆弄的时候我发现了这个设置: Windows Setting for non Unicode programs

事实证明,在执行测试的计算机上,非Unicode程序的语言设置为法语(瑞士)。将其更改为英语(英国)即可解决问题。

可能是chromedriver中的错误。