アンカーを含む要素を選択しようとしていますが、テキストは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"}
どんな助けも大歓迎です。
問題は、あなたが投稿しなかった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();
Xpathとtext()を使用します
driver.findElement(By.Xpath("//strong[contains(text(),'" + service +"')]"));
find_elements_by_xpath("//*[@class='class name']")
素晴らしい解決策です
これには<a> </a>
タグがないようであるため、Seleniumはそれをリンクとして検出できない可能性があります。
あなたは試して使用することができます
driver.findElement(By.xpath("//*[@class='ng-binding']")).click();
これが、このクラスを持つそのページの唯一の要素である場合。
ここでは、CSSセレクターアプローチが確実に機能します。試してください:
driver.findElement(By.CssSelector("a.item")).Click();
このクラス項目の前に他のアンカーがある場合、これは機能しません。 「#my_table> a.item」のようなことを行うと、正確な要素をより適切に指定できます。my_tableは、アンカーが子であるテーブルのIDです。