2014-10-08 146 views
1

如何使用webdriver通過標籤查找輸入字段?Webdriver - 通過標籤定位輸入(Python)

我喜歡測試某個不幸使用動態生成的 ID的Web表單,因此它們不適合作爲標識符。

然而,與每個網頁元素相關的標籤都適合我。 不幸的是,我無法做到這一點與網上提供的幾個建議 。有一個線程在這裏如此,但是這並沒有 產生一個公認的答案:

Selenium WebDriver Java - Clicking on element by label not working on certain labels

爲了解決Java的這個問題時,通常建議通過其文本內容定位標籤作爲錨然後指定輸入元素的xpath:

//label[contains(text(), 'TEXT_TO_FIND')] 

我不知道如何在python中做到這一點。 我的網絡元素:

<div class="InputText"> 
    <label for="INPUT"> 
     <span> 
      LABEL TEXT 
     </span> 
     <span id="idd" class="Required" title="required"> 
      * 
     </span> 
    </label> 
    <span class="Text"> 
     <input id="INPUT" class="Text ColouredFocus" type="text" onchange="var wcall=wicketAjaxPost(';jsessionid= ... ;" maxlength="30" name="z1013400259" value=""></input> 
    </span> 
    <div class="RequiredLabel"> … </div> 
    <span> … </span> 
</div> 

回答

1

不幸的是,我無法在網站上使用CSS或XPATH表達式 。 ID和名稱總是改變。

我發現我的問題的唯一解決方案是骯髒的 - 解析頁面的源代碼 並通過字符串操作提取ID。 當然,這不是網絡驅動器打算使用的方式,但 它運作穩健。

代碼:

lines = [] 
for line in driver.page_source.splitlines(): 
    lines.append(line) 
    if 'LABEL TEXT 1' in line: 
     id_l1 = lines[-2].split('"', 2)[1] 
0

你應該開始用一個div並檢查是否有一個label帶內的恰當的span,那麼您可以通過span標籤input元素與Text類:

//div[@class='InputText' and contains(label/span, 'TEXT_TO_FIND')]/span[@class='Text']/input 
+0

你能做出這樣的回答更加明確給我嗎?也許取決於我給的例子html? – 2014-10-09 09:15:02

+1

要使用上面提供的@alecxe,只需將他的「TEXT_TO_FIND」更改爲「LABEL TEXT」(從您的示例中)。它會找到一個div,後面有一個標籤,後跟一個帶有文本「LABEL TEXT」的文本,如果你願意的話,找到'home'點。然後在該div下找到類Text的範圍,然後輸入你想要的元素。 – 2014-10-10 09:31:29

相關問題