web-dev-qa-db-ja.com

Selenium WebDriverはリンクテキストで要素を見つけることができません

アンカーを含む要素を選択しようとしていますが、テキストはdiv内の段落に埋まっています。私が使用しているHTMLは次のとおりです。

<a class="item" ng-href="#/catalog/90d9650a36988e5d0136988f03ab000f/category/DATABASE_SERVERS/service/90cefc7a42b3d4df0142b52466810026" href="#/catalog/90d9650a36988e5d0136988f03ab000f/category/DATABASE_SERVERS/service/90cefc7a42b3d4df0142b52466810026">
<div class="col-lg-2 col-sm-3 col-xs-4 item-list-image">
<img ng-src="csa/images/library/Service_Design.png" src="csa/images/library/Service_Design.png">
</div>
<div class="col-lg-8 col-sm-9 col-xs-8">
<div class="col-xs-12">
    <p>
    <strong class="ng-binding">Smoke Sequential</strong>
    </p>

私が使用しようとしているコードは、「Smoke Sequential」テキストをターゲットにしています。

driver.findElement(By.linkText(service)).click();

変数「service」が「Smoke Sequential」を保持している場所。実行すると、次のエラーが表示されます。

org.openqa.Selenium.NoSuchElementException: Unable to locate element: {"method":"link text","selector":"Smoke Sequential"}

どんな助けも大歓迎です。

12
Taelus

問題は、あなたが投稿しなかったHTMLの残りの部分にある可能性があります。

この例では(開始タグを閉じただけです):

<a class="item" ng-href="#/catalog/90d9650a36988e5d0136988f03ab000f/category/DATABASE_SERVERS/service/90cefc7a42b3d4df0142b52466810026" href="#/catalog/90d9650a36988e5d0136988f03ab000f/category/DATABASE_SERVERS/service/90cefc7a42b3d4df0142b52466810026">
<div class="col-lg-2 col-sm-3 col-xs-4 item-list-image">
<img ng-src="csa/images/library/Service_Design.png" src="csa/images/library/Service_Design.png">
</div>
<div class="col-lg-8 col-sm-9 col-xs-8">
<div class="col-xs-12">
    <p>
    <strong class="ng-binding">Smoke Sequential</strong>
    </p>
    </div>
</div>
</a>

私は問題なく要素を見つけることができました:

driver.findElement(By.linkText("Smoke Sequential")).click();

要素内にさらにテキストがある場合は、部分リンクテキストによる検索を試すことができます。

driver.findElement(By.partialLinkText("Sequential")).click();
23
Marielle

Xpathとtext()を使用します

driver.findElement(By.Xpath("//strong[contains(text(),'" + service +"')]"));
5
user2932876
find_elements_by_xpath("//*[@class='class name']")

素晴らしい解決策です

0
Jean François

これには<a> </a>タグがないようであるため、Seleniumはそれをリンクとして検出できない可能性があります。

あなたは試して使用することができます

driver.findElement(By.xpath("//*[@class='ng-binding']")).click();

これが、このクラスを持つそのページの唯一の要素である場合。

0
user2062360

ここでは、CSSセレクターアプローチが確実に機能します。試してください:

driver.findElement(By.CssSelector("a.item")).Click();

このクラス項目の前に他のアンカーがある場合、これは機能しません。 「#my_table> a.item」のようなことを行うと、正確な要素をより適切に指定できます。my_tableは、アンカーが子であるテーブルのIDです。

0
marchocolate