将Java变量传递给jQuery函数的JavascriptExecutor参数

时间:2018-08-13 03:24:47

标签: java jquery selenium selenium-webdriver datepicker

嗨,我正在使用Selenium Webdriver,我尝试通过传递Java变量来访问有效ID来执行jQuery脚本。

这是代码。

int move = 3;
String date = "2011-03-05";
String script = "$('#date_of_birth-'+move+).datepicker('update', '+date+')";
js.executeAsyncScript(script, 1000);

我想在jQuery函数中同时使用move和date变量。

3 个答案:

答案 0 :(得分:0)

如果您希望字符串连接发生在Java本身内,那么它必须在目标JavaScript字符串的外部内进行。您目前正在做的是在JavaScript字符串中插入文字字符串movedate

String script = "$('#date_of_birth-'" + move + "').datepicker('update', '" + date + "')";

但是,我们可以在此处使用StringBuilder,这将使内容更易于阅读(并且可能运行得更快):

StringBuilder sb = new StringBuilder("");
sb.append("$('#date_of_birth-'");
sb.append(move);
sb.append("').datepicker('update', '");
sb.append(date);
sb.append("')");
String script = sb.toString();

答案 1 :(得分:0)

经过长期的努力和调试,我找到了解决方案。

这是将Java变量传递给jQuery函数的正确方法。

<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <ImageButton
        android:id="@+id/actionbar_backbutton"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:background="?attr/actionBarItemBackground"
        android:scaleType="centerInside"
        android:src="@drawable/ic_arrow_back_black_24dp" />

    <TextView
        android:id="@+id/actionbar_title"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="105dp"
        android:layout_toRightOf="@id/actionbar_backbutton"
        android:background="?attr/actionBarItemBackground"
        android:ellipsize="end"
        android:gravity="center"
        android:maxLines="1"
        android:text="@string/Easybook_com"
        android:textColor="@color/colorBlackText"
        android:textSize="20sp" />

    <ImageButton
        android:id="@+id/actionbar_homebutton"
        android:layout_width="?attr/actionBarSize"
        android:layout_height="match_parent"
        android:layout_toLeftOf="@+id/actionbar_drawerbutton"
        android:layout_alignParentTop="true"
        android:background="?attr/actionBarItemBackground"
        android:scaleType="centerInside"
        android:src="@drawable/ic_home_black" />

    <ImageButton
        android:id="@+id/actionbar_drawerbutton"
        android:layout_width="?attr/actionBarSize"
        android:layout_height="match_parent"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:background="?attr/actionBarItemBackground"
        android:scaleType="centerInside"
        android:src="@drawable/ic_drawer" />

    <ImageView
        android:id="@+id/actionbar_reddot"
        android:layout_width="?attr/actionBarSize"
        android:layout_height="match_parent"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:background="?attr/actionBarItemBackground"
        android:scaleType="centerInside" />

答案 2 :(得分:0)

您可以在应用程序的以下代码段中尝试一下吗?我猜这可能有效:-

存在的问题: $('#date_of_birth-'3) .datepicker('update','2011-03-05');

当前解决方案: $('#date_of_birth-3') .datepicker('update','2011-03-05');

片段: int move = 3;         字符串日期=“ 2011-03-05”;

    String scripting = "$('#date_of_birth-" + move + "').datepicker('update', '" + date + "')";

    System.out.println(scripting);

    StringBuilder sb1 = new StringBuilder("");
    sb1.append("$('#date_of_birth-");
    sb1.append(move+"'");

    sb1.append(").datepicker('update', '");
    sb1.append(date);
    sb1.append("')");

    String script1 = sb1.toString();
    System.out.println(script1);