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 に答える