【发布时间】:2016-09-17 02:40:43
【问题描述】:
我正在使用 webdriver 在 Django 中填写表格。找到并填写第一个字段名称。但是第二个字段不知何故找不到。这是我正在使用的脚本...
name = browser.find_element_by_id("name")
value = browser.find_element_by_id("value")
submit = browser.find_element_by_id("offer-submit")
name.send_keys(address)
name.send_keys(Keys.TAB)
# I tried having the browser press tab to see if it becomes visible. no luck.
value.send_keys(random.randrange(1, 100, 2))
这是错误回溯:
Traceback (most recent call last):
File "populate_map.py", line 71, in <module>
value.send_keys(random.randrange(1, 100, 2))
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webelement.py", line 320, in send_keys
self._execute(Command.SEND_KEYS_TO_ELEMENT, {'value': keys_to_typing(value)})
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webelement.py", line 461, in _execute
return self._parent.execute(command, params)
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 236, in execute
self.error_handler.check_response(response)
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 192, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotVisibleException: Message: Element is not currently visible and so may not be interacted with
Stacktrace:
at fxdriver.preconditions.visible (file:///c:/users/owner/appdata/local/temp/tmprd4j_t/extensions/fxdriver@googlecode.com/components/command-processor.js:10092)
at DelayedCommand.prototype.checkPreconditions_ (file:///c:/users/owner/appdata/local/temp/tmprd4j_t/extensions/fxdriver@googlecode.com/components/command-processor.js:12644)
at DelayedCommand.prototype.executeInternal_/h (file:///c:/users/owner/appdata/local/temp/tmprd4j_t/extensions/fxdriver@googlecode.com/components/command-processor.js:12661)
at fxdriver.Timer.prototype.setTimeout/<.notify (file:///c:/users/owner/appdata/local/temp/tmprd4j_t/extensions/fxdriver@googlecode.com/components/command-processor.js:625)
正在使用此表单创建字段:
class OfferForm(forms.ModelForm):
service = forms.BooleanField()
class Meta:
model = Offer
fields = [
"name",
"value",
"description",
"tags",
"location",
"code",
"service",
# "duration"
"icon",
]
widgets = {
'name': forms.TextInput(
attrs={'id': 'name', 'class': 'data', 'style': 'font-family: VT323; font-size: 60%', 'required': True, 'placeholder': 'name'}
),
'value': forms.TextInput(
attrs={'id': 'value', 'class': 'data', 'style': 'font-family: VT323; font-size: 60%', 'required': True, 'placeholder': 'value'}
),
}
阅读this question,我发现该值不可见应该是有充分理由的——即通过样式属性使其不可见。但是当我调出萤火虫时,我看不到任何表明它是不可见的。
这是我的模板代码:(我应该提到,#offer 在脚本的前面被单击,这会激活显示——当 webdriver 正在寻找它时,它并不是没有。)
<script>
$("#offer").click(function(){
$("#find-offer").css("display", "none");
$("#make-offer").css("display", "block");
$("#popular-offers").css("display", "block")
$(".welcome").css("display", "none");
});
</script>
<div id="make-offer" style="display: none">
<p>Make an offer</p>
<form name="offer-form" action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" id="offer-submit" class="data" style="font-family: Fira Mono; font-size: 70%; padding: 10px; position: absolute" value="Submit" />
</form>
还有其他想法吗?
【问题讨论】:
-
您介意分享您的模板代码吗?
-
这是为了测试吗?如果是这样,有一种更不痛苦和更快的方法
标签: python django selenium webdriver