【问题标题】:Selenium clear a textbox, then re-populate itSelenium 清除一个文本框,然后重新填充它
【发布时间】:2021-04-07 19:23:14
【问题描述】:

我在使用 c# selenium 包装器时遇到了一些奇怪的情况。

我试图用多个不同的值一遍又一遍地填充文本框,并在每次尝试之间将其清除。我发现每当我使用 .Clear() 或 Cntrl A + Del 清除文本框时,.Text 分配不再有效,但 SendKeys 仍然有效。

        editBox.Text = "test"; // works
        editBox.Text = "test1"; // works
        editBox.SendKeys(Keys.Tab); // works
        editBox.Text = "test2"; // works
        editBox.Text = "third"; // works
        editBox.SendKeys(Keys.Control + "a"); // works
        editBox.SendKeys(Keys.Delete); // works
        //editBox.Clear(); // works
        editBox.Text = "fourth"; // DOESN'T WORK
        editBox.SendKeys("fifth"); // works
        editBox.Text = "sixth"; // DOESN'T WORK

这是 Selenium、包装器中的错误,还是我正在考虑它应该如何工作的方式?我通常更喜欢使用 .Text 赋值,因为它在填写长表单时要快得多。如果我能在删除之前的值之后让它工作,那就太好了。

编辑: 哦,真糟糕,忘了我正在使用一个包装硒​​的控件: .文本换行 ((IJavaScriptExecutor)Browser).ExecuteScript("arguments[0].setAttribute(arguments[1],arguments[2]);", editBox, "value", value);

其他命令是直接的 selenium 命令,希望这有助于解释我在做什么。

【问题讨论】:

  • 从浏览器的角度考虑这一点,确实有点道理。在字段上使用键盘后,该字段的“值”属性将被忽略。所以我想问题是,有没有办法在浏览器中扭转它。
  • 如果您要替换全部内容,则无需先清除该框。
  • .文本分配?不是文字“getter”吗?
  • 是的,我也有这个想法。在这种情况下它会起作用,但是在我的代码的另一部分中,我只在它为空时填充该值,所以如果出现这个问题,那将无法解决它。这可能是我必须解决的问题之一,因为这不是错误。
  • 不,在我的情况下,.Text 的设置器是被激活的。我是这样写的,因为我从 CodedUI 迁移到 Selenium,所以我包装了 selenium 对象,这样我就不必更改我的代码。

标签: c# selenium


【解决方案1】:

原来我只是忽略了显而易见的事情。在某个字段上使用键盘后,该字段的“值”属性将被忽略。

我必须更改用于设置文本框值的 javascript:

((IJavaScriptExecutor)Browser).ExecuteScript("arguments[0].setAttribute(arguments[1],arguments[2]);", editBox, "value", value);

到:

((IJavaScriptExecutor)Browser).ExecuteScript("arguments[0].value=arguments[1];", _Element, value);

【讨论】:

    猜你喜欢
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多