我需要比较字段中的日期与当天对应的日期。 在selenium ide中解决起来非常简单:
<tr>
<td>storeExpression</td>
<td>javascript{var date = new Date();date.getDate()+' '+date.getMonth();}</td>
<td>t_date</td>
</tr>
<tr>
<td>storeExpression</td>
<td>javascript{var date = new Date();(date.getDate() -1)+' 'date.getMonth();}</td>
<td>y_date</td>
</tr>
<tr>
<td>assertText</td>
<td>//div[@id='a-articles-container']/a[3]/span[2]/span[2]/span[2]</td>
<td>regexp:(${t_date}*)|(${y_date}*)</td>
</tr>
但是当我在java中导出html代码时,我得到了非法重复: Pattern.compile("(${t_date}*)|(${y_date}*)")
我的java代码如下所示:
Calendar c = Calendar.getInstance();
String t_date = c.get(c.DAY_OF_MONTH) + " " + c.get(c.MONTH);
String y_date = (c.get(c.DAY_OF_MONTH)-1) + " " + c.get(c.MONTH);
assertTrue(Pattern.compile("(${t_date}*)|(${y_date}*)").matcher(driver.findElement(By.xpath("//div[@id='a-articles-container']/a[5]/span[2]/span[2]/span[2]")).getText()).find());
我可以将文本与变量 y_date 进行比较
assertTrue(Pattern.compile(y_date).matcher(driver.findElement(By.xpath("//div[@id='a-articles-container']/a[5]/span[2]/span[2]/span[2]")).getText()).find());
或t_date
assertTrue(Pattern.compile(t_date).matcher(driver.findElement(By.xpath("//div[@id='a-articles-container']/a[5]/span[2]/span[2]/span[2]")).getText()).find());
但不能同时使用两者!
如何在模式中使用“或”运算符来比较解释变量是否为文本?
最佳答案
Java不支持String Interpolation像 Ruby、PHP 等,所以你不能编写“${variable}”并期望它能够工作。在您的情况下发生的情况是 ${t_date} 保留在该形式中,Pattern.compile 试图将其解释为正则表达式,而 { 和 } 是保留字符。
但是String.format使用像 %s 这样的占位符可以作为一个很好的替代品。
我相信您想要的是以下内容。
assertTrue(Pattern.compile(String.format("(%s*)|(%s*)", t_date, y_date))
.matcher(driver.findElement(By.xpath("//div[@id='a-articles-container']/a[5]/span[2]/span[2]/span[2]")).getText()).find());
关于java - 如何在selenium RC中的java上使用Pattern.compile中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26360993/