2012-09-20 92 views
0

如何修復此代碼的工作?正則表達式和Selenium WebDriver xpath

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

我必須找到一個鏈接,其中5位標識符的變化。

+0

沒有id?沒有固定的xpath?毆打這些開發者...... –

+0

這個問題與[this one]基本相似(http://stackoverflow.com/questions/12447690/selenium-c-sharp-webdriver-findelementsby-linktext-regex/12451786)。在這種情況下,您可以使用'getAttribute(「href」)'而不是'getText()',但其餘的代碼實際上是相同的。 – JimEvans

回答

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,並指出你需要點擊的元素。

1
  1. 試圖讓href屬性
  2. 解析該字符串拿到5位數的標識符
  3. 使用標識符和構建你的定位器,然後單擊。
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(); 
相關問題