【问题标题】:The difference between setting the value and the text using JSE (Selenium c#)使用JSE(Selenium c#)设置值和文本的区别
【发布时间】:2015-12-03 02:13:15
【问题描述】:

我正在使用 IjavaScriptExecutor 来设置属性 value。 但有时会发生我的文本框包含我设置的值,但它没有将其显示为文本。因此,从字面上看,对于某些文本框,它会正常发送输入,而对其中一些则不会。它只是设置值。但不显示文字。 为什么会这样?

代码:

 public static void SendKeysJavaScript(IWebElement element, string message)
    {
        //Instance of IJavaScriptExecutor class
        var js = (IJavaScriptExecutor) Program.Driver;
        //Local variable holding formated string
        var stringFormat = string.Format("arguments[0].setAttribute('value','{0}')", message);
        //Send "message" to the "element"
        js.ExecuteScript(stringFormat, element);
        //confirm that input has been sent
        GetSentInput(element, message);
    }

与此同时,我注意到文本框即使在清除后仍保留该值。这可能是我无法将输入发送到同一个文本框两次的原因之一,重置值的方法是什么?

【问题讨论】:

  • 自动化场景时,您希望尽可能像用户一样执行操作。在这种情况下,您应该使用 .SendKeys() 而不是 JSE。使用 JSE 可以直接绕过“正常”用户行为修改元素,并可能导致问题。
  • @JeffC 有趣的是,有人告诉我使用 JSE,因为它可以显着提高性能,而且它始终是向浏览器发送输入的更好方法。
  • 我从未听说过有关 JSE 更快的消息。我的猜测是它要么大致相同,要么稍慢。 JSE 适用于需要对页面执行 JavaScript 的情况。它不打算执行“正常”用户任务。这就是 WebDriver 的用途。
  • @Mystia 使用 JS 进行端到端测试是很糟糕的行为。您的测试应该验证用户旅程,但这里并非如此。
  • @Arran 谢谢,不,你说得对,这里不是这样。我最近开始使用硒,我正在探索硒的功能,对此还不太了解。但至少我很高兴我问了这个问题,否则我仍然认为 JS 是一个不错的选择..

标签: javascript html selenium selenium-chromedriver


【解决方案1】:

C# 的.Text 属性返回内部文本,即预期的返回值大致是纯文本浏览器将显示的值。。见this

另一方面,value 是这里的属性,至少是您使用的方式。所以唯一的操作方法是使用 JavaScript Executor。

现在,深入研究这个问题,如果我理解正确,clear() 方法不会触发应用程序预期的事件更改,因此您看不到任何更改。要触发更改,有多个选项,包括我从Selenium Java 源代码中获取的选项。

/** * 如果此元素是文本输入元素,这将清除该值。对其他没有影响 * 元素。文本输入元素是 INPUT 和 TEXTAREA 元素。 * * 请注意,此事件触发的事件可能与您预期的不同。特别是,我们不 * 触发任何键盘或鼠标事件。如果要确保触发键盘事件,请考虑 * 使用类似 {@link #sendKeys(CharSequence...)} 和退格键。确保 * 你得到一个更改事件,考虑调用 {@link #sendKeys(CharSequence...)} * 使用制表键。 */

void clear();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 2010-11-15
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多