2013-09-29 303 views
4

我正在使用Selenium的WebDriver並在Python中進行編碼。Selenium(Python):如何在隱藏的輸入中插入值?

有一個隱藏的輸入字段,我試圖插入一個特定的日期值。該字段最初生成一個日曆,用戶可以從中選擇適當的日期,但這似乎是一個比直接插入適當的日期值更復雜的努力來模擬。

該頁面的源代碼如下所示:

<div class="dijitReset dijitInputField"> 
<input id="form_date_DateTextBox_0" class="dijitReset" type="text" autocomplete="off" dojoattachpoint="textbox,focusNode" tabindex="0" aria-required="true"/> 
<input type="hidden" value="2013-11-26" sliceindex="0"/> 

其中value="2013-11-26"是我試圖注入的值(它是最初空,即場:value=""

我理解的webdriver是無法將值插入到隱藏的輸入中,因爲常規用戶無法在瀏覽器中執行此操作,但解決方法是使用Javascript。不幸的是,這是一種我不熟悉的語言。是否有人知道什麼可以工作? ?

回答

5

您可以使用WebDriver.execute_script。例如:

from selenium import webdriver 

driver = webdriver.Firefox() 
driver.get('http://jsfiddle.net/falsetru/mLGnB/show/') 
elem = driver.find_element_by_css_selector('div.dijitReset>input[type=hidden]') 
driver.execute_script(''' 
    var elem = arguments[0]; 
    var value = arguments[1]; 
    elem.value = value; 
''', elem, '2013-11-26') 

UPDATE

from selenium import webdriver 

driver = webdriver.Firefox() 
driver.get('http://matrix.itasoftware.com/') 
elem = driver.find_element_by_xpath(
    './/input[@id="ita_form_date_DateTextBox_0"]' 
    '/following-sibling::input[@type="hidden"]') 

value = driver.execute_script('return arguments[0].value;', elem) 
print("Before update, hidden input value = {}".format(value)) 

driver.execute_script(''' 
    var elem = arguments[0]; 
    var value = arguments[1]; 
    elem.value = value; 
''', elem, '2013-11-26') 

value = driver.execute_script('return arguments[0].value;', elem) 
print("After update, hidden input value = {}".format(value)) 
+0

感謝您的答覆!我試過(沒有錯誤的'執行'),但無法得到日期出現,即使腳本不會引發任何錯誤。我錯過了什麼嗎? 爲了清楚起見,我在原始帖子中添加了我正在嘗試使用的網站。 – Infection

+0

@感染,對不起,我修復了這個錯字。我用['test page'](http://jsfiddle.net/falsetru/mLGnB/show/)對它進行了測試,並且它工作正常。 (該頁面的隱藏字段被設置爲「舊值」)。 – falsetru

+0

@感染,哦,你用這個網址更新了這個問題。稍等片刻。我將用該網址進行測試。 – falsetru