我有一个输入元素,如下:
<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>