9

我已经阅读了 xpath 教程并查看了许多其他帖子,因此我不确定我错过了什么。我只是想通过 xpath 找到以下元素:

<input class="t-TextBox" type="email" test-id="test-username"/>

我尝试了很多东西,例如:

element = findElement(By.xpath("//[@test-id='test-username']"));

错误是Expression is not a legal expression

我在 MacBook 上使用 Firefox

任何建议将不胜感激。

4

8 回答 8

19
element = findElement(By.xpath("//*[@test-id='test-username']"));
element = findElement(By.xpath("//input[@test-id='test-username']"));

(*) - 表示任何标签名称。

于 2013-06-06T07:00:44.510 回答
3

您应该在 xpath 中添加标签名称,例如:

element = findElement(By.xpath("//input[@test-id='test-username']");
于 2013-06-06T02:15:34.657 回答
3

您的语法完全错误....您需要将 findelement 提供给驱动程序

即您的代码将是:

WebDriver driver = new FirefoxDriver();
WebeElement element ;

element = driver.findElement(By.xpath("//[@test-id='test-username']"); 

// 你的 xpath 是:"//[@test-id='test-username']"

我建议试试这个:"//*[@test-id='test-username']"

于 2013-12-01T13:46:55.007 回答
2

你错过了最后的右括号:

element = findElement(By.xpath("//[@test-id='test-username']"));
于 2014-08-07T21:57:50.240 回答
2

只需要*在 xpath 的开头加上最后的右括号即可。

element = findElement(By.xpath("//*[@test-id='test-username']"));
于 2016-08-04T07:58:47.903 回答
1

您还没有指定您尝试对哪种 html 元素进行绝对 xpath 搜索。在您的情况下,它是输入元素。

试试这个:

element = findElement(By.xpath("//input[@class='t-TextBox' and @type='email' and @test-    
id='test-username']");
于 2013-09-18T22:22:57.247 回答
1

正确Xpath的语法如下:

//tagname[@value='name']

所以你应该写这样的东西:

findElement(By.xpath("//input[@test-id='test-username']"));
于 2016-06-09T12:13:24.990 回答
1

您也可以使用包含:

element = findElement(By.xpath("//input[contains (@test-id,"test-username")]");
于 2016-10-13T18:04:28.003 回答