web-dev-qa-db-ger.com

Wählen Sie einen Link mit Selenium Webdriver?

Wie kann ich einen Link mit Selenium Webdriver auswählen?

Selen vor würde gemacht werden von:

    Selenium.click("link=Users");

Aber wie kann ich das auch mit Webdriver machen?

Ich habe darüber nachgedacht

    driver.findElement(By.partialLinkText("Users")).click();

aber das geht nicht. Es wird kein Link angeklickt!

<html>
<body>
<div id="mainpage" class="mainpage">
<div id="pageid" class="pageid">
<div id="body">

<table>
<tbody>
<tr>
<td>
<table>
<tbody>
<tr>
<td>
<div id="id_menu" class="mymenu">
<ul>
<li class="li_class ">
<a href="/user.xhtml">Users</a>

stacktrace:

    org.openqa.Selenium.NoSuchElementException: Unable to locate element: 
{"method":"partial link text","selector":"Users"} Command duration or timeout: 11.36 
seconds For documentation on this error, please visit: http://seleniumhq.org/exceptions
/no_such_element.html Build info: version: '2.24.1', revision: '17205', time: '2012-06-19 
17:28:14' System info: os.name: 'Windows XP', os.Arch: 'x86', os.version: '5.1', 
Java.version: '1.7.0_02' Driver info: driver.version: RemoteWebDriver Session ID: 
178449d1-4ff3-44f3-b35c-6a158db7c430 error at line: 34
7
membersound

XPath ist einer der genauesten Wege zum Punkt Element.

Versuche dies:

driver.findElement(By.XPath("//li[@class='li_class']/a")).Click();
7
Ivan Reznikov

Das sollte funktionieren:

driver.findElement(By.LinkText("Users")).click();

Per LinkText ist das möglich

5

Verwendung eines CSS-Selektors:

a[href*=user.xhtml]

Hier sind einige Tipps zum Schreiben von cssSelector

 = --> Equals string
^= --> Starts with string
$= --> Ends with string
*= --> Contains 
~= --> Contains in a list
3
Nick

Ich bin mit Christoph einverstanden - Linktext sollte funktionieren. Aber ich verfolge einen anderen Ansatz, der immer für mich funktioniert.

Alle Elemente, die ich suchen oder auswählen muss, gebe ich ihnen eine ID (ohne CSS gibt es keinen Unterschied in der Ansicht). Dies hilft bei der Lesbarkeit meiner Testfälle, beim Schreiben von Funktionen für allgemeine Dinge und verbessert die Wartbarkeit des Codes. Nur für den dynamisch generierten Code oder Orte, an denen ich id nicht verwenden kann, gehe ich anders vor.

1
some_other_guy

In meinem Fall ist es Chromedriver nicht erlaubt, auf den Link zu klicken. Ich konnte das beheben, indem ich

if(driver.toString().contains("chrome")) {
        WebElement form=driver.findElement(By.id("form_id"));
            ((JavascriptExecutor)driver)
            .executeScript("arguments[0].setAttribute('style', 'display: block;')", form); //here I change visibility of element
    }
0
SkorpEN

Ich denke das wird funktionieren:

driver.findElement(By.xpath("//a[@href='/user.xhtml']")).click();
0
Sakthi

Ich hatte auch das Problem, dass LinkText und LinkPartialText nicht funktionierten. Dies lag daran, dass ich dann den HTMLUnit-Treiber verwendete. Mit FireFox funktionieren beide Methoden einwandfrei.

0
isi

Ich hatte ein ähnliches Problem mit PHP Webdriver. LinkText oder partialLinkText funktionierten nicht, aber der für die Suche bereitgestellte Text entsprach dem in SOURCE-Code. (sagen wir mal, es war ein Linktext: "Benutzer")

Ich habe mir am Kopf gekratzt, warum es nicht funktioniert, wenn es sonst überall war. Dann habe ich den Unterschied gesehen. Tatsächlich war der Text im Quellcode-Link Users, wurde aber bei Anzeige von css text-transform in Kleinbuchstaben geändert und daher als "Benutzer" angezeigt. Als ich meine Suchkriterien von Benutzer zu Benutzer geändert habe, funktionierte es wie ein Schaden!

Denken Sie also daran, dass der Web-Treiber tatsächlich mit den Daten arbeitet, die er sieht. Hatte keine Ahnung, dass die Groß- und Kleinschreibung beachtet werden muss! Aber es hat tatsächlich funktioniert und mein Problem gelöst. Prost!

0
Selenium fan