arg参数中的代码模型/引号(“)

时间:2013-11-24 15:02:41

标签: java code-generation sun-codemodel

我尝试在codemodel(Sun)中创建下一个表达式:

  driver.findElement(By.xpath("//div[text()=\""+whatToclick+"\"]/parent::span/parent::span")).click();

所以whatToclick将成为我函数中的参数。

所以我写了下一篇:

    method.body().invoke(JExpr.ref("driver"), "findElement").arg(jc.ref(By.class).staticInvoke("xpath").arg("//div[text()=\"+"+ whatToclick.name() +"+\"]/parent::span/parent::span")).invoke("click");

我有两个问题:

  1. 我没有把whatToClick作为参数成功。它总是在引号中(因为我的表达式是一个字符串,我必须放/",否则它会关闭字符串。)

  2. 创建的表达式没有click()部分。

  3. 任何帮助?

1 个答案:

答案 0 :(得分:1)

请尝试以下方法,使用JExpr.lit()直接引用字符串,.add()连接字符串和变量。它还使用方法体上的add()方法添加click()调用:

method.body().add(JExpr.ref("driver").invoke("findElement")
    .arg(codeModel.ref(By.class).staticInvoke("xpath")
        .arg(JExpr.lit("//div[text()=\"+").plus(whatToclick).plus(JExpr.lit("+\"]/parent::span/parent::span"))).invoke("click")));

输出:

driver.findElement(By.xpath((("//div[text()=\"+"+ whatToclick)+"+\"]/parent::span/parent::span")).click());