如何修复此代码以使其正常工作?
public void check(WebDriver driver) {
driver.findElement(By.xpath("//a[matches(@href,'/staff/transcript/\\d{5}//.pdf')]")).click();
}
我必须找到一个 5 位标识符不同的链接。
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();
解决您的问题的一种可能方法:使用 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 并指出您需要单击的元素。