【问题标题】:Selenium WebDriver findElement(By.xpath()) not working for meSelenium WebDriver findElement(By.xpath()) 不适合我
【发布时间】:2013-06-06 01:55:08
【问题描述】:
我已经阅读了 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
任何建议将不胜感激。
【问题讨论】:
标签:
xpath
selenium
webdriver
【解决方案1】:
element = findElement(By.xpath("//*[@test-id='test-username']"));
element = findElement(By.xpath("//input[@test-id='test-username']"));
(*) - 表示任何标签名称。
【解决方案2】:
您应该在 xpath 中添加标签名称,例如:
element = findElement(By.xpath("//input[@test-id='test-username']");
【解决方案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']"
【解决方案4】:
你错过了最后的右括号:
element = findElement(By.xpath("//[@test-id='test-username']"));
【解决方案5】:
只需要在xpath的开头加上*,最后加上右括号。
element = findElement(By.xpath("//*[@test-id='test-username']"));
【解决方案6】:
您尚未指定您尝试在哪种 html 元素上进行绝对 xpath 搜索。在您的情况下,它是输入元素。
试试这个:
element = findElement(By.xpath("//input[@class='t-TextBox' and @type='email' and @test-
id='test-username']");
【解决方案7】:
正确的Xpath 语法如下:
//tagname[@value='name']
所以你应该这样写:
findElement(By.xpath("//input[@test-id='test-username']"));
【解决方案8】:
你也可以使用 contains:
element = findElement(By.xpath("//input[contains (@test-id,"test-username")]");