Selenium WebDriver,尝试设置输入元素的value属性

时间:2019-08-17 12:49:32

标签: selenium webdriver

我有一个输入元素,如下:

<input id="contestant[name]" name="name" ng-model-options="{ debounce: 300 }" ng-model="contestantState.form.name" ng-pattern=".*" placeholder="Alice Smith" required="" style="width: 246px" type="text" class="ng-valid-pattern ng-dirty ng-valid-parse ng-touched ng-empty ng-invalid ng-invalid-required">

我正在尝试使用Selenium向该元素发送文本,我尝试了以下操作:

fullname = driver.find_element_by_xpath("//input[@id='contestant[name]']")
fullname.send_keys("Test Name")

但是,这让我声名狼藉

Element <...> is not reachable by keyboard

因此,我尝试使用execute_script来更改value属性,如下所示:

driver.execute_script("arguments[0].setAttribute('value', 'Full Name');", fullname)

这也不起作用。但是,当我使用Firefox开发人员控制台并找到元素并按如下所示设置属性时,它确实起作用。

$0.setAttribute('value', 'Test Name')

上面的唯一问题是,在更改value属性以使其被接受之后,我仍然需要单击该元素,但这是下一步。

为什么我的execute_script与控制台不同?

编辑:我刚刚注意到,当我使用execute_script设置value属性时,它在innerHTML属性中可见,只是在网页上不可见。

print(driver.execute_script("return document.getElementById('contestant[name]').parentNode.innerHTML"))

<input id="contestant[name]" name="name" ng-model-options="{ debounce: 300 }" ng-model="contestantState.form.name" ng-pattern=".*" placeholder="Alice Smith" required="" style="width: 246px" type="text" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required ng-valid-pattern" value="Full Name">
<div class="help-inline" ng-hide="contestantEditForm.name.$viewValue">Required</div>

0 个答案:

没有答案