2015-09-03 69 views
0

我在选择要在Selenium中读取的表格时遇到问题。
我有一个表中'thead'里面有两个'tr'元素,我需要找到一种方法来忽略其中的第一个。
下面是代码:Selenium XPath - 忽略表格中的元素

<table class="noselect"> 
    <thead> 
     <tr> 
     <th> </th> 
     <th class="number IOL">Interest Rates</th> 
     <th class="number IO"> 
     </tr> 
     <tr> 
     <th>Description</th> 
     <th class="number">Value</th> 
     <th class="number">Percentage</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
     <tr class=""> 
     <tr class=""> 
     <tr class=""> 
     <tr> 
     <tr> 
    </tbody> 
</table> 

使用Selenium我会要求它记录了一定的行和列的值。然后,我们将查看我将给它的Table元素(希望使用可以在这种情况下工作的XPath),查看thead并记录每列的标题。在这种情况下,我一直在努力,事实上,在这个表的顶部有一个额外的'tr'阻碍了这个过程。

这是这个元素如何目前使用:

[TableAlias("Detailed table")] 
protected virtual IWebElement DetailedTable() 
{ 
    return Driver.FindElement(By.XPath("//table[@class='noselect']")); 
} 

我已经尝试了许多不同的方式,我不能去上班,但什么已经去为我的要点是:

//table[@class='noselect movements']/thead/tr/th[not(text()='Interest Rates')]/../../.. 

在这里,我坚持去'tr'元素,告诉它不要使用它然后退出,但选择它再次 - 甚至不会取消选择整个'tr'元素。它似乎没有帮助(对我),我试图删除的'tr'元素是空白的,没有类或定义的功能。

除了'thead'中的第一个'tr'元素是否有一种方法可以选择整个表作为一个元素?

+0

你是什么意思与“选择整个表”?之后你想怎么办?这对于回答你的问题很重要,所以更好地描述你真正想要达到的目标(以及你已经尝试过的xpath在哪里?) – drkthng

+0

使用Selenium我会要求它记录某一行和列的值。然后,我们将查看我将给它的Table元素(希望使用可以在这种情况下工作的XPath),查看thead并记录每列的标题。在这种情况下,我一直在努力,事实上,在这个表的顶部有一个额外的'tr'阻碍了这个过程。我将添加这个和我已经尝试使用的XPath的 – StevieBruce

回答

1

结合两个xpthes。没有第一TR处理该THEAD标签一号的XPath采取THEAD和第二TBODY

//table/thead/tr[not(position()=1)] | //table/tbody 
+0

这样做的工作,它选择我需要的所有东西,但不幸的是它被看作是两个单独的元素,所以当Selenium使用它时,它只会结束看到这两个XPath中的第一个。如果我能找到一种让Selenium结合这两种元素的方法,这将是完美的 – StevieBruce

+0

@StevieBruce不幸的是,我对硒一无所知。但它在xpath测试器中工作正常 – splash58

0

在你的函数,得到的TR S中的集合,并与开始[1](跳过[0])和处理休息。

+0

好主意,我觉得这可能是最好的方法。问题是有很多测试已经使用这个函数,并且这样做会阻止那些工作,但我可以复制该代码并专门为此问题创建一个新进程。谢谢 – StevieBruce

+0

我还没有看到该功能,但如果有很多共享代码,我会尝试将两者合并,如果可能的话,尽量减少共享代码。 – JeffC