web-dev-qa-db-ja.com

属性で要素を検索

属性を持つ要素を見つけようとしています。さて、Id、tagName、Xpath、およびSeleniumの他のすべての定義済みメソッドを持つ要素を見つけることができます。ただし、入力として属性名と値を指定すると、WebElementを具体的に返すメソッドを記述しようとしています。

List<WebElement> elements = webDriver.findElements(By.tagName("Attribute Name"));
for(WebElement element : elements){
    if(element.getText().equals("Value of Particular Attribute")){
        return element;
    }
    else{
        return null;
    }
}

XPathがオプションではないと仮定すると、これを行う他のより良い方法はありますか?

31
Kishore Banala

このタスクはCSSで簡単に達成できます。

式は次のとおりです。

element[attribute='attribute-value']

あなたが持っているなら、

<a href="mysite.com"></a>

あなたはそれを使用して見つけることができます:

By.cssSelector("a[href='mysite.com']");

これは可能な属性を使用して機能します。

このページでは、効果的なcssセレクターを作成する方法と、それらの属性を一致させる方法についての良い情報を提供します。 http://ddavison.io/css/2014/02/18/effective-css-selectors.html

54
ddavison

私はあなたの要件を理解していません:

XPathがオプションではないと仮定すると...

これが誤ったの前提である場合、XPathはperfectオプションです!

webDriver.findElements(By.xpath("//element[@attribute='value']"))

もちろん、elementattribute、およびvalueを実際の名前に置き換える必要があります。ワイルドカードを使用して「任意の要素」を見つけることもできます。

webDriver.findElements(By.xpath("//*[@attribute='value']"))
20
SiKing

代わりにCSSセレクターを使用します。

List<WebElement> elements = webDriver.findElements(By.cssSelector("*[attributeName='value']"));

編集:XPathの代わりにCSSセレクター

12
Sizik