Selenium WebDriver findElement(By.xpath())不适合我

时间:2013-06-06 01:55:08

标签: xpath selenium webdriver

我已经通过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

任何建议都将不胜感激。

8 个答案:

答案 0 :(得分:17)

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

(*) - 任何标记名

答案 1 :(得分:3)

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

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

答案 2 :(得分: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']"

答案 3 :(得分:2)

你错过了最后的右括号:

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

答案 4 :(得分:2)

只需要在xpath的开头添加*,最后在最后关闭括号。

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

答案 5 :(得分:1)

您尚未指定要尝试进行绝对xpath搜索的html元素类型。在你的情况下,它是输入元素。

试试这个:

element = findElement(By.xpath("//input[@class='t-TextBox' and @type='email' and @test-    
id='test-username']");

答案 6 :(得分:1)

正确Xpath语法如下:

//tagname[@value='name']

所以你应该这样写:

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

答案 7 :(得分:1)

您也可以使用包含:

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