如何选择selenium webdriver的链接?
之前的Selenium将通过以下方式完成:
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
答案 0 :(得分:7)
XPath是指向元素的最精确方法之一。
试试这个:
driver.findElement(By.XPath("//li[@class='li_class']/a")).Click();
答案 1 :(得分:5)
这应该有效:
driver.findElement(By.LinkText("Users")).click();
可以使用LinkText
答案 2 :(得分:3)
使用CSS选择器:
a[href*=user.xhtml]
以下是编写cssSelector
的一些提示 = --> Equals string
^= --> Starts with string
$= --> Ends with string
*= --> Contains
~= --> Contains in a list
答案 3 :(得分:1)
我同意Christoph - Link文本应该有用。 但我遵循一种不同的方法,一直对我有用。
我需要找到或选择的所有元素我给它们一个id(没有CSS,视图中没有任何区别)。这有助于我的测试用例的可读性,为一般内容编写函数并提高代码的可维护性。仅针对动态生成的代码或我无法使用id的地方,我采用不同的方法。
答案 4 :(得分:0)
我认为这会奏效:
driver.findElement(By.xpath("//a[@href='/user.xhtml']")).click();
答案 5 :(得分:0)
我还遇到LinkText和LinkPartialText无法解决的问题。这是因为我使用了HTMLUnit Driver。使用FireFox这两种方法都可以正常工作。
答案 6 :(得分: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
}
答案 7 :(得分:0)
我使用PHP Webdriver遇到了类似的问题。 LinkText或partialLinkText不起作用,但为搜索提供的文本在SOURCE代码中与此相同。 (假设是链接文字:“用户”)
我在摸不着头脑,为什么它不起作用,什么时候到处都是。然后我看到了区别。实际上在源代码链接文本中是Users,但是在显示时它被css text-transform修改为小写,因此它显示为“users”。当我将搜索条件从用户更改为用户时,它就像伤害一样!
所以请记住 - webdriver实际上适用于它看到的数据。根本不知道它是区分大小写的!但它确实起作用并解决了我的问题。干杯!
答案 8 :(得分:-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();
}
}