我需要比较当前日期对应的字段中的日期。 在selenium中非常简单地解决了:
<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());
但不能同时使用两者!
如何在模式中使用“或”运算符来比较解释变量是否为文本?
答案 0 :(得分:1)
Java不支持像Ruby,PHP等String Interpolation,所以你不能写&#34; $ {variable}&#34;期待它的运作。在你的情况下发生的是$ {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());