C#webdriver - 如何从已知元素类名中发现xpath?

时间:2011-05-18 19:55:00

标签: c# xpath webdriver selenium-webdriver

我正在测试一个网站,其中有一个“帐户”页面,其中显示了可用订阅级别的表格,其中列标题是不同类型的帐户,行列出了所有功能,哪些功能在哪个级别可用。 E.g:

          fanboy       poweruser     neophyte     freeloader
Widgets   1,000        500           250          100
Doodads     750        350           100          100
Thingies    500        250           100           50
          [UPGRADE]    [UPGRADE]     [UPGRADE]    Your Plan  

这都是作为具有唯一类名的嵌套div元素完成的,因此通过相应的类名查找特定单元格非常简单。例如:

var yourPlan = driver.FindElement(By.ClassName("your_plan"));  

如果我已经知道的话,我也可以通过他们的XPath找到特定的单元格。例如:

var yourPlan = driver.FindElement(By.XPath(".//div[@class='your_plan']"));  

但有时候我需要通过classname来发现我来过的单元格的xpath,而且在Webdriver(C#)中似乎没有一种简单的方法可以做到这一点。有人曾经这样做过吗?

<小时/> 编辑:向所有人道歉,因为没有更清楚这一点:我没有遇到通过classname或其他属性(甚至xpath,当我已经知道它)找到元素时遇到的任何问题。但是我需要的是,一旦通过除xpath以外的方式找到所述元素,webdriver就会报告它发现给我的完整xpath。

希望有所帮助。

任何帮助表示赞赏。 谢谢 格雷格

2 个答案:

答案 0 :(得分:1)

Selenium没有任何办法可以提供这些信息。虽然有一些工具可以为给定元素生成XPath(想到Firefox的Firebug和XPather插件),但这不是Selenium提供的功能。我希望我能给你一个更好的答案,但答案是肯定的,Selenium不会为你通过其他方式找到的元素提供XPath。

答案 1 :(得分:0)

只需使用以下内容创建XPath表达式字符串:

"//div[@class='" + className + "']"

如果类名确实是唯一的,则此XPath表达式将仅找到该div。如果您不知道该元素是div还是其他内容,请使用

"//*[@class='" + className + "']"