我是selenium的新手并尝试将文本输入到CodeMirror生成的textarea中。我查看了textarea上的其他问题,但我无法解决问题。
我正在使用Chrome,并且已经找到了textarea所在的来源,并且能够点击它以使光标闪烁。但是,我发现它没有属性。如何将文本输入textarea?我已经尝试了其他元素,我已经得到了一个"无法集中注意力#34;或"不可见"我猜的错误意味着那些元素不是textarea。
a= browser.find_element_by_css_selector('div.CodeMirror.CodeMirror-wrap.dojoDndTarget.cm-s-sql.dojoDndContainer').click()
print a
None
我意识到添加一个很长的源代码可能对其他用户不方便,但我不确定哪个CodeMirror行可能引用textarea并且为了完整性而发布它。这是源代码和截图。
<div class="CodeMirror CodeMirror-wrap dojoDndTarget cm-s-sql dojoDndContainer" style="font-size: 12px; font-weight: normal;">
<div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 4px; left: 4px;">
<textarea autocorrect="off" autocapitalize="off" spellcheck="false" style="position: absolute; padding: 0px; width: 1000px; height: 1em; outline: none;" tabindex="0">
</textarea>
</div>
<div class="CodeMirror-vscrollbar" not-content="true" style="min-width: 18px;">
<div style="min-width: 1px; height: 0px;">
</div>
</div>
<div class="CodeMirror-hscrollbar" not-content="true" style="min-height: 18px;">
<div style="height: 100%; min-height: 1px; width: 0px;">
</div>
</div>
<div class="CodeMirror-scrollbar-filler" not-content="true">
</div>
<div class="CodeMirror-gutter-filler" not-content="true">
</div>
<div class="CodeMirror-scroll" tabindex="-1">
<div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 30px; min-height: 24px; padding-right: 0px; padding-bottom: 0px;">
<div style="position: relative; top: 0px;">
<div class="CodeMirror-lines">
<div style="position: relative; outline: none;">
<div class="CodeMirror-measure">
</div>
<div class="CodeMirror-measure">
</div>
<div style="position: relative; z-index: 1;">
</div>
<div class="CodeMirror-cursors" style="">
<div class="CodeMirror-cursor" style="left: 4px; top: 0px; height: 16px;"> </div></div><div class="CodeMirror-code">
<pre class="">
<span style="padding-right: 0.1px;">
<span>
</span>
</span>
</pre>
</div>
</div>
</div>
</div>
</div>
<div style="position: absolute; height: 30px; width: 1px; top: 24px;"></div><div class="CodeMirror-gutters" style="display: none; height: 197px;">
</div>
</div>
</div>
感谢。
答案 0 :(得分:1)
在Selenium中,WebElement#click()
不会返回任何内容。如果要在单击后进一步与元素对象进行交互,则需要先将其保存到变量中。
但更重要的是,您点击了{em>包含 <div>
而不是<textarea>
本身的<textarea>
。即使点击<div>
提供<textarea>
焦点,您的元素对象仍然是包含<div>
的句柄,它不会对send_keys()
做出有意义的反应。如果<textarea>
是用户输入文本的位置,则必须找到 元素并与之交互:
textarea = browser.find_element_by_css_selector('.CodeMirror textarea')
(除非<textarea>
已停用且需要额外的步骤才能启用它,否则您无需click()
开始输入它。)
然后只需send_keys()
:
textarea.send_keys('alert("Hello, World!")')