WebDriver Selenium API:在XPath中标识WebElement

时间:2012-08-16 11:42:11

标签: api selenium webdriver selenium-webdriver

我最近刚开始使用Selenium,我决定只使用Selenium 2 / WebDriver。 在我的测试代码中,我经常在WebElement到达,而不知道它在页面中的位置。

我希望有一个代码,给定一个WebElement,构造一个XPath表达式来唯一地选择它。

Selenium的FireFox刻录机插件可以做到这一点;我想要的是在Selenium 2中执行的代码。

我可以使用WebElement的{​​{1}}至walk up the treefindElement自行编写此类代码,以便找到我们来自的孩子,但提出这些代码并不容易。快速(反复调用findElements似乎很糟糕)和完成(例如由于命名空间)。

A related question建议使用CSS选择器 - 这对我来说没问题。)

有没有人为我做过这件事?什么是最好的方法?

2 个答案:

答案 0 :(得分:2)

这是非常直接的:顺便说一下,css是要走的路; xpath应仅用作最后的手段。 http://sauceio.com/index.php/2010/01/selenium-totw-css-selectors-in-selenium-demystified/在这里提供的空间中解释了css定位器的深度。

最佳方法:如果您正在使用firefox下载firebug,那将让您查看您的HTML。 Pres cmd + Shift + c,它将为你打开一个元素荧光笔。找到你的html元素,也许它看起来像这样

<input type="submit" tabindex="110" value="Post Your Answer" id="submit-button">

然后你可以非常简单地找到你的元素

WebElement element = driver.findElement(By.cssSelector("input[id='submit-button']"))

请注意,我们将标记名首先设置为“input”,然后在括号“input [id ='submit-button']中添加某种唯一标识符。”在大多数情况下,这将覆盖您使用的所有css定位器的75%。另外25%需要在我放置在页面顶部的链接中覆盖一些更棘手的东西。

您可以问“我可以使用哪种唯一标识符,除了ID”这里介绍的内容如下:http://release.seleniumhq.org/selenium-remote-control/0.9.2/doc/dotnet/Selenium.html

好运开始

修改

祝你好运首先找到你的元素......如果你需要,你可以通过部分定位文本搜索元素,如输入[id * ='submit']。当您使用部分文本作为定位器的一部分时,使用它对动态生成的元素很有帮助,该元素不会因元素而异。

你提到走在html树上或许我第一次看到这个问题时没有看到。我认为你遇到了问题。不建议沿着html树走,因为它会使你的测试对html更改更加脆弱。从长远来看,它也会使你的代码无法读取。一般情况下,如果您的身份证丢失或不可预测,我建议您与proj交谈。关于让开发人员制作实际上可以实现自动化的代码的管理(例如:在关键元素上实现标识符)。从长远来看,这实际上可以节省您和开发人员的大量工作,并且还可以提高测试的速度和可靠性。

答案 1 :(得分:0)

我们可以使用ID找到提交按钮:

1.driver.findElement(By.id(&#34;提交按钮&#34))

ID&gt; NAME&gt; CSS&gt; XPATH