使用JSE设置值和文本之间的区别(Selenium c#)

时间:2015-09-07 13:38:11

标签: javascript html selenium selenium-chromedriver

我正在使用 IjavaScriptExecutor 来设置Atrribute 。 但有时会发生我的文本框包含我设置的值,但它不会将其显示为文本。因此,对于某些文本框而言,它通常会发送输入,而有些则不是。它只是设置值。但不显示文字。 为什么会这样?

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);
    }

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

1 个答案:

答案 0 :(得分:2)

C#的value属性返回的innertext。预期的返回值大致是纯文本浏览器显示的内容。。见this

另一方面,clear()是此处的属性,至少是您使用的方式。因此,只有这样才能使用JavaScript Executor。

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

  

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

$wpb_set_post_views = function($postID) { $count_key = 'wpb_post_views_count'; $count = get_post_meta($postID, $count_key, true); if($count==''){ $count = 0; delete_post_meta($postID, $count_key); add_post_meta($postID, $count_key, '0'); }else{ $count++; update_post_meta($postID, $count_key, $count); } }; add_action( 'wp_head', function ($post_id) { if ( !is_single() ) return; if ( empty ( $post_id) ) { global $post; $post_id = $post->ID; } $wpb_set_post_views($post_id); });