java - 如何在selenium RC中的java上使用Pattern.compile中的变量

标签 java html selenium selenium-webdriver

我需要比较字段中的日期与当天对应的日期。 在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/

相关文章:

html - 在线更改邀请函颜色,可变颜色

javascript - ReactJS 将列动态附加到图像库中的行中

python - Selenium Threads : How to open the same browser in multiple threads? 为每个浏览器使用唯一的代理

java - Selenium Web 驱动程序检索响应

java - Log4j2 不滚动文件,而是在 SizeBasedTriggeringPolicy 之后覆盖同一文件

java - 如何让gradle下载库

java - 从抽象类中获取变量

java - 如何获取类中声明的类型参数的数量?

html - "background-size:"css 样式是否适用于所有浏览器 (CSS)?

java - 有没有办法停止排队的 JUnit 测试并仍然保持 JavaFX Gui 运行?