繁体   English   中英

Selenium 用 sendKeys() 方法替换输入字段的值

[英]Selenium replace value for the input field with sendKeys() method

我对sendKeys()方法有一个意外问题:

很长一段时间后一切正常,但是当代码尝试将数据设置到输入字段时,意外地替换了 (certain(:)) 值:

在此处输入图像描述

例如,如果我在字段中设置值USER_NAME ,则值替换为/tmp/7d7b7...../upload123...file/USER_NAME 正如我们所看到的 - 一些路径被添加到USER_NAME值中。

我在方法中添加了日志,我们可以看到值被替换的时刻:

    clearInputFld(inputFld);
    Log.info("INSIDE clearAndTypeIntoInputField() ---------> value after clearing: " + inputElement.getAttribute("value"));
    Log.info("INSIDE clearAndTypeIntoInputField() ---------> value to set: " + value);

    inputElement.sendKeys(value);

    Log.info("INSIDE clearAndTypeIntoInputField() ---------> value after set: " + inputElement.getAttribute("value"));

Output:

INSIDE clearAndTypeIntoInputField() ---------> value after clearing: 
INSIDE clearAndTypeIntoInputField() ---------> value to set: USER_NAME
INSIDE clearAndTypeIntoInputField() ---------> value after set: /tmp/7d7b7...../upload123...file/USER_NAME

所以我们可以确定——值在值设置到字段中的那一刻准确设置。

重要的知识和结论:

  • 并非所有用户都被替换 - 只有几个特定用户。 所以我想一部分用户被缓存了,但是我不明白发生这种情况的过程,为什么会发生这种情况。 以及这些用户可能被缓存的位置。

  • 我还重新启动了docker,所以看来问题不在自动方面。

  • 是否有可能通过后端或 UI 部分发生此问题?

看起来页面上正在运行一个脚本,该脚本会更改您键入的输入,因为这是一个密码字段。

我建议您使用机器人 object 来模仿键盘敲击。 首先使用 Selenium 单击文本字段,然后启动机器人代码(使用 package Java.awt):

Robot robot = null;
    try {
        robot = new Robot();            
        for (char c : textToType.toCharArray()) {
            int keyCode = KeyEvent.getExtendedKeyCodeForChar(c);
            if (KeyEvent.CHAR_UNDEFINED == keyCode) {
                logger.error("Key code not found for character '" + c + "'");
            } else {
                try {
                    robot.keyPress(keyCode);
                    robot.delay(10);
                    robot.keyRelease(keyCode);
                    robot.delay(10);
                } catch (Exception e) {
                    if (c == '_') {
                        robot.keyPress(KeyEvent.VK_SHIFT);
                        robot.keyPress(KeyEvent.VK_MINUS);
                        robot.keyRelease(KeyEvent.VK_MINUS);
                        robot.keyRelease(KeyEvent.VK_SHIFT);
                    }
                    if (c == ':') {
                        robot.keyPress(KeyEvent.VK_SHIFT);
                        robot.keyPress(KeyEvent.VK_SEMICOLON);
                        robot.keyRelease(KeyEvent.VK_SEMICOLON);
                        robot.keyRelease(KeyEvent.VK_SHIFT);
                    }
                }
            }
        }
        robot.keyPress(KeyEvent.VK_ENTER);           
    } catch (Exception ex) {
        logger.error(ex.getMessage());
    }

根据 Logs 的说法,我认为有一些东西是有价值的。

建议尝试:获取更改的文本,进行一些操作,将其填回

string[] temp;
temp = (inputElement.Text).Split('/');
inputElement.Sendkeys(temp(temp.Length - 1));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM