web-dev-qa-db-ja.com

Seleniumでhrefに特定の部分文字列があるリンクをクリックする方法は?

以下はリンクの束<a elements.ONLY one属性hrefの値としてサブストリング「long」があります

<a class="c1" href= "very_lpng string" > name1 </a>
<a class="g2" href= "verylong string" > name2 </a>   // The one that I need
<a class="g4" href= "very ling string" > name3 </a>
<a class="g5g" href= "very ng string" > name4 </a>

...................

hrefにサブストリング「long」が含まれるリンクをクリックする必要があります。これどうやってするの?

PS:driver.findElement(By.partialLinkText("long")).click(); // b/c名前で選択

49
Buras

Hrefにサブストリング「long」が含まれるリンクをクリックする必要があります。これどうやってするの?

CSSセレクターの美しさ。

あなたの声明は...

driver.findElement(By.cssSelector("a[href*='long']")).click();

これは、英語では、

href属性を持ち、その属性contains 'long'を持つ 'a'要素を見つけます

自動化のための独自のセレクターの効果的な定式化に関する有用な記事と、他のすべての等価演算子のリストを見つけることができます。 containsstarts withなど...で見つけることができます: http://ddavison.io/css/2014/02/18/effective-css-selectors.html

96
ddavison

driver.findElement(By.partialLinkText("long")).click();を使用します

5
rt2800

あなたはこれを行うことができます:

//first get all the <a> elements
List<WebElement> linkList=driver.findElements(By.tagName("a"));

//now traverse over the list and check
for(int i=0 ; i<linkList.size() ; i++)
{
    if(linkList.get(i).getAttribute("href").contains("long"))
    {
        linkList.get(i).click();
        break;
    }
}

この中で、最初にすべての<a>タグを見つけて、list.Afterに格納します。リストを1つずつ繰り返して、href属性に含まれる<a>タグを見つけます長い文字列。そして、その特定の<a>タグをクリックして、ループから抜け出します。

4
Praveen

Xpathロケーターの助けを借りて、同じことを達成することもできます。

あなたの声明は次のようになります:

driver.findElement(By.xpath(".//a[contains(@href,'long')]")).click();

そして、すべてのリンクをクリックするには、URLに長いが含まれています:

List<WebElement> linksList = driver.findElements(By.xpath(".//a[contains(@href,'long')]"));

for (WebElement webElement : linksList){
         webElement.click();
}
1
Nitish Kumar