0

このコードを修正するにはどうすればよいですか?

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

5 桁の識別子が異なるリンクを見つけなければなりません。

4

2 に答える 2

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();
于 2012-09-20T16:19:37.103 に答える
0

問題の解決策の 1 つ: 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 桁の識別子ですか (つまり、ページ上で 1 つの要素のみを意味しますか?)、そうであれば、この要素への css ロケーターまたは xpath を簡単に見つけることができます。HTML の一部を提供し、クリックする必要がある要素を指摘してください。

于 2012-09-20T11:45:38.117 に答える