在 Mac,Katalon Studio 无法单击按钮,而是想单击 HTML 父标签

On Mac, Katalon Studio Unable to Click Button, Wants to Click the HTML Parent Tag Instead

我在 Katalon Studio 中有一个按钮单击命令,我在其中使用 scrollIntoView 将按钮置于视图中,然后单击该按钮。

((JavascriptExecutor) functiondriver).executeScript("arguments[0].scrollIntoView({block: \"nearest\"});", buttonelement);
WebUI.delay(4)    
WebUI.click(findTestObject('object/path'))

在执行时使用 Chrome,代码在 Windows 计算机上运行良好,但在 Mac 计算机上,大约有 40% 的时间出现以下错误:

Unable to click on object '/object/path/' (Root cause: org.openqa.selenium.WebDriverException: unknown error: Element <button class="classname">...</button> is not clickable at point (750, 548). Other element would receive the click: <html lang="en">...</html>

我在网上四处寻找解决方案,并试图通过添加您在上面看到的延迟来解决这个问题,但这没有用。此外,当查看浏览器时,自动化是 运行,我可以直观地看到应该被点击的按钮 - 所以它不像按钮没有加载。有没有其他方法可以让我编写此代码以使其更一致地工作?

更新:我尝试了这个答案和相关问题中建议的更智能的等待功能,但都没有用。我想强调一下,这个问题只出现在 Mac 机器上,而不是 Windows;这就是使该问题与其他类似问题不同的原因。

我确实有发现。当运行脚本通过Katalon Studio时,Chrome默认不会最大化window。但是,我做了一个实验,强制浏览器最大化并解决了问题。因此,当浏览器未全屏显示时,Katalon Studio 似乎无法在 Mac 上设置 x,y 坐标。这是我在 Mac 台机器上的安装或 WebUI 已知行为的某种校准问题吗?

延迟是自动化的重要组成部分,有时按钮似乎在那里,但在与之交互的那一刻,它可能还没有准备好。这个时间范围通常非常小,而且速度太快,肉眼看不到。

WebUI 有一系列用于执行动态等待的助手,它们等待元素满足某些条件,而不是总是等待 X 秒。

Instead of WebUI.delay(4)

您可以尝试类似的方法:

WebUI.waitForElementClickable(findTestObject('object/path'))

如果问题确实是它在页面准备好让您单击按钮之前尝试交互太快,那么这将强制延迟一直持续到 Selenium 确定按钮处于以下状态将允许您单击它。

我终于找到问题了。 Mac 添加了一个悬停在页面内容上的滚动条。它是不可见的,除非您将鼠标悬停在它上面以使用它。在我的例子中,我在使用滚动到视图时使用 "nearest" ,这有时(但不总是)导致按钮位于页面的最底部。在这种情况下,水平滚动条悬停在按钮上方。这就是为什么当我最大化 window 时问题消失的原因,以及为什么在 Windows 机器上没有出现问题的原因。我通过将 scrollIntoView 脚本更改为:

解决了这个问题
scrollIntoView({block: \"center\"}