2013-11-20 36 views
0

我最近一直在切換到通過Xpath使用CSS選擇器。我遇到了一些我無法解釋的東西,我希望有更多知識淵博的人能夠提供幫助。Webdriver CSS選擇器,第n個子位置1高於預期

<form id="configure_server"> 
    <div class="form_row"> 
     <div class="form_label">...</div> 
     <div class="form_input_elements">...</div> 
    </div> 
    <input name="serverID" id="serverID" value="2" type="hidden"> 
    <div class="form_row"> 
     <div class="form_label">...</div> 
     <div class="form_input_elements">...</div> 
    </div> 
    <div class="form_row"> 
     <div class="form_label">...</div> 
     <div class="form_input_elements">...</div> 
    </div> 
    <div class="form_row"> 
     <div class="form_label">...</div> 
     <div class="form_input_elements">...</div> 
    </div> 
    <div class="form_row"> 
     <div class="form_label">Name</div> 
     <div class="form_input_elements">Thor</div> 
    </div> 
    <input name="name" id="name" value="Thor" type="hidden"> 
    <div class="form_row"> 
     <div class="form_label">...</div> 
     <div class="form_input_elements">...</div> 
    </div> 
    <div class="form_row"> 
     <div class="form_label">...</div> 
     <div class="form_input_elements">...</div> 
    </div> 
</form> 

我試圖獲取元素的文本等於Thor

要查找元素並檢索其文本我使用:

self.driver.find_element_by_css_selector("#configure_server>div.form_row:nth-child(6)>div.form_input_elements") 

我很困惑,我不得不使用:nth-child(6),我預計將使用:nth-child(5)。任何人都可以解釋爲什麼我不得不引用更高的孩子一個指數?

回答

4

在您的第一個div.form_row之後有一個input元素,它使您的表單的第二個子元素成爲input。這會將所有其他元素向前移動一個索引,從而使您的表單的第五個子元素因爲所有的inputdiv都是共享相同父級表單的同級元素。

如果表格中的所有的元素是div.form_row S或隱藏輸入,您可以選擇使用div:nth-of-type(5)而不是div.form_row:nth-child(6)

self.driver.find_element_by_css_selector("#configure_server>div:nth-of-type(5)>div.form_input_elements") 

注意,在:nth-of-type()類名不佔;只有元素類型(其標籤名稱)。但是,如果您的表單中直接使用的div只有div.form_row,那麼使用.form_row課程是否符合條件並不重要。

+0

謝謝你。我認爲它是如此,但我無法找到任何證實我懷疑的事情,因此認爲最好問。再次感謝。 –