Выбор ссылки с Selenium Webdriver?

как я могу выбрать ссылку с selenium webdriver?

селен Перед будет сделано:

    selenium.click("link=Users");

но как я могу сделать то же самое с WebDriver?

Я думал о

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

но это не работает. Нет ссылке!

<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

9 ответов


XPath-один из самых точных способов точка элемент.

попробуйте это:

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

Это должно работать:

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

по LinkText возможно


использование селектора CSS:

a[href*=user.xhtml]

вот несколько советов для написания cssSelector

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

Я согласен с Кристофом-текст ссылки должен работать. Но я следую другому подходу, который работает для меня все время.

все элементы, которые мне нужно найти или выбрать, я даю им id (без CSS не будет никакой разницы в представлении). Это помогает в удобочитаемости моих тестовых случаев, написании функций для общего материала и улучшает ремонтопригодность кода. Только для динамического сгенерированного кода или мест, где я не могу использовать id, я иду для другого подхода.


У меня также была проблема, что LinkText и LinkPartialText не работали. Это было потому,что я использую драйвер HTMLUnit. Использование FireFox оба метода работает нормально.


в моем случае chromedriver не разрешено нажимать ссылку, из-за формы получения щелчка. Я смог исправить это, используя:

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
    }

Я думаю, что это будет работать:

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

У меня была аналогичная проблема с использованием PHP Webdriver. LinkText или partialLinkText не работали, но текст, предоставленный для поиска, был равен этому в исходном коде. (допустим, это был текст ссылки: "пользователи")

я чесал голову, почему он не работает, когда везде это было. И тут я увидел разницу. На самом деле в исходном коде текст ссылки был Users, но на дисплее он был изменен css text-transform в нижний регистр, поэтому он отображался как "users". Когда я изменил критерии поиска от пользователей к пользователям это работало как вред!

Итак, помните-webdriver действительно работает с данными, которые он видит. Не знал, что это чувствительно к регистру вообще! Но это сработало и решило мою проблему. Ура!


попробуйте это:

package mypack;
import java.util.List;

import org.openqa.selenium.By;

import mypackage.WebDriver;

import org.openqa.selenium.firefox.FirefoxDriver;

@SuppressWarnings("unused")
public class classnew {

    private static FirefoxDriver driver;

    public static void main(String[] args) {
        //String baseUrl = "http://newtours.demoaut.com/";
      FirefoxDriver Firefoxdriver = new FirefoxDriver();

        driver = null;
        driver.get("http://newtours.demoaut.com");

        String linkText1 = driver.findElement(By.partialLinkText("egis")).getText();
        System.out.println(linkText1);
        String linkText2 = driver.findElement(By.partialLinkText("EGIS")).getText();
        System.out.println(linkText1);  
        driver.quit();
    }
}