首页 > 解决方案 > Selenium 闲置直到我移动鼠标

问题描述

有一个让我发疯的 Selenium(或更可能是网页)问题。只有当我物理移动鼠标时,页面才会继续执行。我已经尝试了从尝试模拟悬停、点击、键盘按下等到 Thread.sleeps 的所有方法。没有什么能解决它,但请放心,鼠标的单次移动就足以让它再次运行(这让我认为这是一个网页问题)。如果我不移动鼠标,或者以某种方式与页面进行物理交互,它将无限空闲。

通过故障排除,似乎与该页面的每一次交互(无论是显式等待、元素单击还是 driver.getAttribute)都足以让它空闲一次,之后所有交互都按预期执行。

该网页是有角度的,我通常与之交互的元素是位于 mat-card 元素内的输入和按钮元素。当页面第一次加载时,会运行一个查询来确定元素的值/状态。因此,如果数据库中的值是某种类型,那将触发一些按钮被启用,并且输入元素具有不同的值等。我相信页面加载的方式可能会导致这个问题。只有此网页会导致此问题,站点的其余部分按预期运行。

我有一个只有 5 秒的隐式等待超时,所以如果它没有触发它并停止执行,这不是元素可见性问题。

我在网上只看到过一个这样的例子,那就是一个在这里使用量角器的人:selenium-webdriver idles until mouse is move

如果有人知道是什么导致了超出我的尝试的原因,我将不胜感激,即使这是确认我无能为力,但可以与开发人员讨论这个问题,看看它是否在他们的边等

标签: javaangularjsseleniumselenium-chromedrivertestng

解决方案


在 driver.get 请求页面后,我设法通过“强制”鼠标移动来解决此问题,而无需立即等待。如果我添加等待,它会有同样的空转问题,但是有了这个,它在 98% 的时间里都可以工作。比以前好多了。我无法解释为什么我需要这样做,但我所知道的是 100% 这是页面加载的方式。

    Actions action = new Actions(driver);
    action.moveToElement(driver.findElement(By.xpath("/html/body/app-root/app-nav-bar/mat-toolbar/div/mat-icon")));
    action.perform();
    action.moveByOffset(15,15);
    action.perform();

在进一步的测试中,如果我在 Windows 10 中移动“桌面”,它似乎会挂起,并且几乎可以肯定地排除了这将在无头模式下工作。仍在寻找真正的解决方案,因为上面是一个快速而肮脏的“修复”


推荐阅读