7

如何选择带有 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>

堆栈跟踪:

    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
4

9 回答 9

8

这应该有效:

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

通过 LinkText 是可能的

于 2012-08-23T12:08:08.970 回答
7

XPath 是指向元素的最精确方法之一。

试试这个:

driver.findElement(By.XPath("//li[@class='li_class']/a")).Click();
于 2012-08-23T23:54:26.693 回答
3

使用 CSS 选择器:

a[href*=user.xhtml]

这里有一些编写 cssSelector 的技巧

 = --> Equals string
^= --> Starts with string
$= --> Ends with string
*= --> Contains 
~= --> Contains in a list
于 2015-04-14T21:06:46.357 回答
1

我同意 Christoph 的观点——链接文本应该可以。但我采用了一种不同的方法,它一直对我有用。

我需要定位或选择的所有元素都给它们一个 id(没有 CSS,视图不会有任何差异)。这有助于我的测试用例的可读性,为一般的东西编写函数并提高代码的可维护性。仅对于动态生成的代码或我无法使用 id 的地方,我会采用不同的方法。

于 2012-08-24T06:30:47.997 回答
0

我认为这会起作用:

driver.findElement(By.xpath("//a[@href='/user.xhtml']")).click();
于 2012-08-23T12:34:58.643 回答
0

我也遇到了 LinkText 和 LinkPartialText 不起作用的问题。这是因为我使用了 HTMLUnit 驱动程序。使用 FireFox 两种方法都可以正常工作。

于 2013-04-25T07:55:18.550 回答
0

在我的情况下,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
    }
于 2015-02-20T15:31:13.000 回答
0

我在使用 PHP Webdriver 时遇到了类似的问题。LinkText 或 partialLinkText 不起作用,但为搜索提供的文本与 SOURCE 代码中的文本相同。(假设它是链接文本:“用户”)

我一直在摸不着头脑,为什么它不起作用,而在其他任何地方都是如此。然后我看到了不同之处。实际上在源代码中链接文本是Users,但是在显示时它被css text-transform修改为小写,所以它显示为“users”。当我将搜索条件从“用户”更改为“用户”时,它就像有害!

所以请记住 - webdriver 实际上适用于它看到的数据。完全不知道它是区分大小写的!但它确实有效并解决了我的问题。干杯!

于 2015-05-25T17:07:35.237 回答
-2

试试这个:

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();
    }
}
于 2015-03-12T07:28:51.423 回答