2014-02-17 65 views
0

內找到元我的HTML代碼如下所示:如何與XPath

<html> 
    <body> 
     <div> 
     </div> 
     <div> 
      <table> 
       <tbody id=a> 
        <tr> 
         <td> 
          <div> 
           <span> 
            some Text 
           </span> 
          </div> 
         </td> 
        </tr> 
        <tr> 
         <td> 
          <div> 
           <span> 
            some Text2 
           </span> 
          </div> 
         </td> 
        </tr> 
        <tr> 
         <td> 
          <div> 
           <span> 
            some Text3 
           </span> 
          </div> 
         </td> 
        </tr> 
       </tbody> 
     </table> 
    </div> 
</body> 

我想通過自己的文字來選擇每個span元素。我可以通過ID選擇tbody。我試過這個:

tbody.FindElement(By.XPath(String.Format(".//span[contains(text(), {0}))]", &var))); 
(var = somex0020Text) 

但這總是返回我的表中的第一個<span>元素。

我也試過:

tbody.FindElements(By.XPath(String.Format(".//span[contains(text(), {0}))]", &var))); 

它返回一個包含每一個<span>元素在我的表中的列表,我不知道爲什麼。

我也弄不明白,爲什麼

tbody.FindElement(By.XPath(String.Format(".//span[text() = {0})]", &var))); 

拋出一個元素未發現異常,當含有方法返回一個<span>元素只用相同的文字。

回答

0

您可以使用jQuery獲取「Table」中的所有span元素。

實施例:

var items = $('table div span'); 
    items.each(function (x) { 
     alert(items[x].innerHTML); 
    }); 
+0

短而甜的​​解釋。 – Desmond

+1

除jQuery不能與WebDriver組合使用。 – t0mppa

+0

你打算說上面的解決方案是不合適的......如果是這樣,上述解決方案有什麼問題?謝謝。 – Venkat

0

tbody.FindElement(By.XPath(的String.Format( 「.//跨度[含有(文本(),{0}))]」,& VAR) ));
(var = somex0020Text)

但這總是返回我的表中的第一個元素。

這是Selenium中的預期行爲。正如我所看到的,有3個元素與你的代碼中提到的xpath相同,在這種情況下,Selenium返回第一個元素

tbody.FindElements(By.XPath(的String.Format( 「.//跨度[含有(文本(),{0}))]」,& VAR)));

其中返回一個包含我的表中的每個單一元素的列表,我不知道爲什麼。

這也是一個expected behavior in SeleniumFindElements將返回具有相同xpath的所有元素。

因此,將var的值更改爲some Text2some Text3以查找其他兩個元素。

以下xpath將爲some Text2工作:

.//span[contains(text(), 'some Text2'))] 
+0

我希望硒返回唯一一個匹配XPath和文本的元素?我知道所有3個元素的XPath是相同的,但文本是獨一無二的。 – user3292642

+0

你正在使用'contains()',並且所有3個元素都包含'some Text' ... – Amith

+0

我應該說沒有一個文本包含任何其他文本。 – user3292642

2

我試圖通過使用XPath爲:

.//span[contains(text(),'some Text')] 

它是選擇所有的3跨度。

所以對此,我參考了父元素。

爲1跨度:.//tbody[@id='a']//tr[1]//span[contains(text(),'some Text')]

爲第二:.//tbody[@id='a']//tr[2]//span[contains(text(),'some Text')]

爲3:.//tbody[@id='a']//tr[3]//span[contains(text(),'some Text')]

通過這個我可以單獨選擇每個span元素。

0

嘗試使用此Xpath $ x(「// tr // span [contains(。,'some Text')]」)