我尝试在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");
我有两个问题:
我没有把whatToClick作为参数成功。它总是在引号中(因为我的表达式是一个字符串,我必须放/"
,否则它会关闭字符串。)
创建的表达式没有click()
部分。
任何帮助?
答案 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());