一尘不染

Selenium webdriver click vs action.click有什么区别?

selenium

我在我正在自动化的网站中为弹出对话框而苦苦挣扎,由于某种原因,它不会单击对话框中的按钮,但可以与其他一切正常交互。它也可以毫无问题地识别按钮,当我看到它运行时,我可以看到它确实在颜色改变时单击了按钮,所以我有点卡住了。

我的代码最初看起来很明显:-

WebElement targetElement = waitforElement(threadSesh);
targetElement.click();

但是当我将其更改为以下内容时,一切似乎都可以正常工作!

WebElement targetElement = waitforElement(threadSesh);
Actions action = new Actions(threadSesh.driver);
action.click(targetElement);
action.perform();

谁能告诉我为什么一种方法不起作用而另一种却可以起作用?同样,不管是否有用,该网站都是使用twitter
bootstrap构建的,尽管这样做没有什么区别,但是按钮本身是非常基本的,就像这样。

<div class="modal hide fade in" style="width: 481px; margin-left: -241px; padding: 15px; display: block;" role="dialog" data-backdrop="static" data-keyboard="false" aria-hidden="false">
...
<div class="modal-footer">
<a id="save-EditDetails" class="btn btn-small btn-info" type="button" style="margin-right: 7px; padding-left: 15px; padding-right: 15px;" data-bind="click: ok" href="#">Save</a>
</div>
</div>

阅读 642

收藏
2020-06-26

共1个答案

一尘不染

我不确定您的具体情况,但是WebElement click方法和Actions
click方法之间有一些区别。Actions的单击非常笨拙,它几乎只是将click事件发送到您传递的元素(位置)。它并不关心元素,它只是单击并向前移动,而webelement单击是一个阻塞调用(并非总是要检查引用),并且它还具有前提条件,例如要单击的WebElement必须可见。同样,webElements的click是一个void方法,actions
click返回对您正在使用的Action的引用。有关更多信息,请在此处
此处检查。


编辑。查看您发布的标记,这可能是完全错误的,因为我不是Bootstrap CSS的负责人modal hide fade in,尤其是fade in那里的部分看起来可疑。您确定当发送webelement.click()时,您的元素处于可点击状态吗?怎么了?没有?再说一次,如果单击动作确实有效,为什么不随它去呢,我的意思是,如果某些方法起作用,为什么要解决呢?

2020-06-26