2012-10-04 74 views
0

讓說,我有一個HTML的結構是這樣的:CSS選擇器,通過兒童選擇值

<html><head></head> 
    <body> 
      <table> 
        <tr> 
          <td> 
            <table> 
              <tr> 
                <td>Left</td> 
              </tr> 
            </table> 
          </td> 
          <td> 
            <table> 
              <tr> 
                <td>Center</td> 
              </tr> 
            </table> 
          </td> 
          <td> 
            <table> 
              <tr> 
                <td>Right</td> 
              </tr> 
            </table> 
          </td> 
        </tr> 
      </table> 
    </body> 
</html> 

我想構建CSS選擇器來訪問三個子表,它們只能通過一個內容區分表數據項在他們的第一行。

我該怎麼做?

+1

您是否打算分別選擇不同的選擇器? – BoltClock

+0

是的,我需要三個選擇器。他們不能基於位置。 –

+1

這會打破內容和佈局分離的概念。餿主意。最好使用JavaScript。 –

回答

1

我認爲沒有這樣的方法在CSS選擇器來驗證內部文本。

您可以通過使用xpath或jQuery路徑來實現。

的XPath:

"//td[contains(text(),'Left')]" 

       or 

    "//td[text()='Right']" 

jQuery的路徑

jQuery("td:contains('Centre')") 

使用下面的邏輯,你可以在webdriver的自動化執行jQuery的路徑。

JavascriptExecutor js = (JavascriptExecutor) driver; 
WebElement element=(WebElement)js.executeScript(locator); 
+0

那麼,這給了我的細胞內容,但我可以通過多種方式。我需要獲取包含該單元格的TABLE在第一行的第一個位置。 –

1

元素上的.text方法返回元素的文本。

tables = page.find_elements_by_xpath('.//table') 
contents = "Left Center Right".split() 
results = [] 
for table in tables: 
    if table.find_element_by_xpath('.//td').text in contents: # returns only the first element 
     results.append(table) 

您可以通過設置「頁面」的第一個「表」元素,然後運行你在該搜索縮小搜索領域。有各種各樣的方法來改善這種性能。請注意,如果存在大量無關表,該方法將相當緩慢。每個網頁都會對它如何選擇代表信息感到怪異,確保你能夠繞過這些網站來提高效率。

您還可以使用列表理解返回結果。

results = [t for t in tables if t.find_element_by_xpath('.//td').text in contents]