5

我正在使用 Selenium 的 WebDriver 和 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。不幸的是,这是我不熟悉的语言。有人会知道什么会起作用吗?

4

1 回答 1

11

您可以使用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')

更新

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))
于 2013-09-29T14:23:12.940 回答