正则表达式和Selenium WebDriver xpath

时间:2012-09-20 10:46:06

标签: regex selenium webdriver

如何修复此代码?

 public void check(WebDriver driver) {
    driver.findElement(By.xpath("//a[matches(@href,'/staff/transcript/\\d{5}//.pdf')]")).click();
}

我必须找到一个5位数标识符不同的链接。

2 个答案:

答案 0 :(得分:1)

  1. 尝试获取href属性
  2. 解析该字符串以获取该5位数标识符
  3. 使用该标识符并构建您的定位器并单击。
  4. String href=driver.findElement(By.xpath("//a[contains(@href,'/staff/transcript/')][contains(@href,'.pdf')]")).getAttribute("href");
    
    String identifier=href.substring(href.lastIndexOf("/")+1,href.indexOf("."));
    
    driver.findElement(By.xpath("//a[matches(@href,'/staff/transcript/"+identifier+"//.pdf')]")).click();
    

答案 1 :(得分:0)

您问题的一种可能解决方案: 使用js遍历所有标签并找到与你的正则表达式相对应的第一个。

pubic String getLocatorByRegExp(){

 JavascriptExecutor js = (JavascriptExecutor) driver;
        StringBuilder stringBuilder = new StringBuilder();

stringBuilder.append("var regex = /^\d{5}$/");
stringBuilder.append("var x=document.getElementsByTagName('a');");
stringBuilder.append("for(var t = 0; t <x.length; t++){if(regex.test(parseInt(x[t].text()))) return x[t].text().toString();} ");

       String res= (String) js.executeScript(stringBuilder.toString());
       return res;
}
String properLinkText = getLocatorByRegExp();
driver.findElement(By.xpath(//a[contains(text(),properLinkText)])).click()

相当复杂的方法。但在我看来,有可能找到更简单的解决方案。 它是5位数的标识符在页面上是唯一的(我的意思是页面上只有一个元素?) 如果是这样,很容易找到此元素的css定位器或xpath。 请提供一些你的html并指出你需要点击的元素。