我正在尝试测试一个包含元素的页面,该页面在首次打开页面时,其style = attribute设置为display: none;
。在Firefox中,当测试与页面交互时(现在是两个文本字段),该按钮已启用,可以通过编程方式单击。但是,在IE8中,如果页面已经与测试进行了交互,则无法单击该按钮,即使我尝试手动单击它也是如此。这就是代码的样子:
<a tabindex="21" onclick="if(!allow_submit() || nextStepLocked()){return false;};; new Ajax.Request(saveInfo); return false;" id="nextStepButton" href="#" class="nextButton" style="display: none;">
<img src="/btn_next_step.png" alt="Btn_next_step">
</a>
<img style="" src="/btn_next_step.png?" id="hiddenNextStepButton" class="nextButton" alt="Btn_next_step">
页面上有一个类似的块导致这个块,我可以使用代码browser.image(:alt => "Btn_next_step").click
轻松点击它。我还注意到,当图像从不可点击状态切换到可点击状态时,它会向上移动几个像素;如果我在代码中触发可点击状态,则会发生相同的移动,但按钮不会变为可点击状态。
到目前为止,我已尝试使用AutoIt来模仿页面上正常采取的操作,并且我还尝试了许多不同的与图像交互的方式,例如引用不同的索引,同时使用多种识别方法,等等上。我甚至尝试在irb中乱搞,但无济于事。
更新
我检查了输入字段,它们确实响应了onchange事件,但只是为了大写你输入的文本的第一个字母。由于按钮似乎可以工作,如果我在页面上做任何事情,我查看了整个源代码并在页面末尾找到以下内容:
<script>
document.onkeydown=function(e){
accession_hotkeys(e);
};
</script>
但是,我不确定如何恰当地解雇这个事件。对任何特定元素执行此操作似乎没有效果。
答案 0 :(得分:1)
这将是一个评论,但我还没有代表。如果您可以在没有WATiR的情况下单击它,则可以使用代码here使用顶级硬件单击使用WATiR单击它。如果没有,请忽略这个答案。
无论如何,代码是有用的,它使用鼠标指针在最高级别进行实际鼠标单击。如果你不能在WATiR中与它互动,并且你不能在没有它的情况下与它进行交互我会说你对Dave的回答比我的更好。
答案 1 :(得分:1)
我建议不要试图找出你必须调用的javascript或者你必须操纵的设置,而是建议尝试看一下人们与网站交互时“自然”发生的事情。仔细查看输入字段的HTML,看看当某些事件触发时它们是否连接到javascript脚本(我怀疑'onchange')
Firewatir和Watir不是从公共代码库派生的(更像是在事后合并的sorta),并且很可能firewatir在设置字段时引发那些事件,但是watir不是。另一种可能性是firewatir代码可能足够慢,因为它点击按钮,客户端代码能够改变按钮的状态,而IE尚未发生。
您可能需要在您按照所需方式设置值后,针对输入元素触发特定事件。再一次,我怀疑它会'onchange'但是如果没有看到你的HTML就不能确定。
您可能需要做的另一件事是确保代码等待的时间足以让任何客户端脚本进行更改,因此我建议在尝试单击按钮之前尝试一秒睡眠。
通常我使用IRB会话对这样的事情进行故障排除,因为它允许我按照自己的节奏执行诸如设置值,触发事件之类的事情,并且在完成每件事之后我可以检查页面的状态。例如,在元素上触发事件并查看页面如何“响应”。 (这在“脚本速度”很难做到)。此外,如果事情在IRB中工作,但是当完全相同的代码作为脚本执行时,问题几乎总是脚本执行“太快”并且您需要插入一些延迟以允许客户端代码执行这是特定脚本步骤之间的事情。
答案 2 :(得分:0)
我的猜测是你必须找到要触发的JavaScript事件:How to find out which JavaScript events fired?
答案 3 :(得分:0)
黑暗中的另一个镜头,因为它似乎在整个文档上寻找任何类型的'keydown'事件..我想知道是否
browser.fireEvent(onkeydown)
会奏效吗?