1

我在 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 默认不会最大化窗口。但是,我做了一个实验,我强制浏览器最大化并解决了这个问题。因此,当浏览器不是全屏时,Katalon Studio 似乎无法在 Mac 上设置 x,y 坐标。这是我在 Mac 机器上使用 WebUI 的安装或已知行为的某种校准问题吗?

4

2 回答 2

1

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

scrollIntoView({block: \"center\"}
于 2018-03-08T23:21:59.900 回答
1

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

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

Instead of WebUI.delay(4)

你可以尝试类似的东西:

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

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

于 2018-03-03T01:00:12.103 回答