我有一个很长的 html 页面,里面有很多可编辑的元素。当点击一个元素时,会弹出一个编辑对话框。奇怪的是,如果元素位于页面顶部,则可以成功访问其编辑对话框,而底部和某些中间位置元素的编辑对话框则无法访问。打印出的错误是:“元素当前不可见,因此可能无法与之交互”。对失败的编辑对话框的一些检查是:
p dialog.exist?
==>得到了真实
p dialog.visible?
==>弄错了puts dialog.attribute_value('style') ==>got ""
(萤火虫显示样式属性值为'display:block;'并且顶部元素的成功对话框检查具有完全相同的值,可见也是'false'!!!太奇怪了!!为什么可以访问它?)
然后我尝试了:
browser.execute_script("document.getElementById('dialogDiv').style.display='block'; ")
将对话框样式属性值设置为“显示:块;” 希望它变得可见,但失败了。
在这个长长的页面上,当弹出元素的编辑对话框时,并没有滚动条。所以底部元素的部分对话框有可能被掩盖。这是一个原因吗?所以我尝试了:
bottom_element.wd.location_once_scrolled_into_view
在单击之前滚动到底部元素,当对话框弹出时,对话框的所有部分都会显示但仍然无法访问。
最后一次尝试:
编辑对话框打开后,使用 javacript 滚动
browser.execute_script("window.scrollBy(0,-100)")
该对话框位于浏览器窗口的中间,没有被任何东西掩盖,但仍然得到
元素当前不可见,因此可能无法与之交互
当我移动到类似的长页面但弹出对话框后有滚动条时,可以成功访问底部元素的对话框。有人对此有任何想法吗?请与我分享,谢谢提前。
html是:
<div id="dialogDiv" style="display: block;">
<div class="sage_dialog ui-draggable" style="top: 322px; display: block; margin-bottom: 1000px; left: 542px;">
对话框的位置和大小为:
<struct Selenium::WebDriver::Point x=0, y=1576>
<struct Selenium::WebDriver::Dimension width=800, height=0>
我从如何强制 Selenium WebDriver 单击当前不可见的元素中得到了一条线索?
height=0 是个问题,怎么改?