webentwicklung-frage-antwort-db.com.de

Selenium WebDriver kann kein Element durch Linktext finden

Ich versuche, ein Element auszuwählen, das einen Anker enthält, aber der Text ist in einem Absatz innerhalb eines Div eingebettet. Hier ist der HTML-Code, mit dem ich arbeite:

<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>

Der Code, den ich verwende, um ihn zu fangen, zielt auf den Text "Smoke Sequential" mit:

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

Wo die Variable 'service' "Smoke Sequential" enthält. Wenn ich es starte, erhalte ich die folgende Fehlermeldung:

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

Jede Hilfe wäre sehr dankbar.

11
Taelus

Das Problem liegt möglicherweise im Rest der HTML-Datei, dem Teil, den Sie nicht gepostet haben.

Mit diesem Beispiel (ich habe gerade die offenen Tags geschlossen):

<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>

Ich konnte das Element problemlos finden mit:

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

Wenn sich innerhalb des Elements mehr Text befindet, können Sie versuchen, einen Teil des Linktextes zu finden:

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

Verwenden Sie xpath und text ()

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

ist eine großartige Lösung

0
Jean François

Dies scheint keine <a> </a>-Tags zu haben, so dass Selenium es möglicherweise nicht als Link erkennen kann.

Sie können versuchen und verwenden

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

wenn dies das einzige Element auf dieser Seite mit dieser Klasse ist.

0
user2062360

Ein CSS-Selector-Ansatz könnte hier definitiv funktionieren. Versuchen:

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

Dies funktioniert nicht, wenn vor diesem Klassenelement weitere Anker vorhanden sind. Sie können das genaue Element besser angeben, wenn Sie etwas wie "#my_table> a.item" tun, wobei my_table die ID einer Tabelle ist, der der Anker untergeordnet ist.

0
marchocolate