2015-09-07 67 views
2

我正在使用IjavaScriptExecutor设置Atrribute 。 但有时它发生在我的文本框包含我设置的值,但它不显示为文本。所以从字面上来看,一些文本框通常会发送一个输入,而不是一些输入。它只是设定价值。但不显示文字。 这是怎么回事?使用JSE(Selenium c#)设置值和文本的区别

CODE:

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); 
    } 
与此同时

另外,我注意到,清除,即使文本框仍保持价值。这可能是我无法将输入发送到同一文本框两次的原因之一,重置值的方式是什么?

+0

当自动场景中,您要执行的动作和会尽可能的用户。在这些情况下,你应该使用.SendKeys()而不是JSE。使用JSE可以直接绕过“正常”用户行为修改元素,并可能导致问题。 – JeffC

+0

@JeffC有趣的是,我被告知要使用JSE,因为它大大提高了性能,而且它始终是向浏览器发送输入的更好方式。 –

+0

我从来没有听说过JSE会更快。我的猜测是它大致相同或稍慢。 JSE适用于需要对页面执行JavaScript的情况。它不打算做“正常”的用户任务。这就是WebDriver的用途。 – JeffC

回答

2

C#的.Text属性返回这是的的innerText预期的返回值大致就是一个纯文本浏览器将显示。。请参阅this

另一方面,value是此处的属性,至少是您正在使用的方式。所以操作的唯一方法就是使用JavaScript Executor。

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

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

void clear();

相关问题