Selenium 操作 moveToElement 仅不适用于 browserstack iphone

问题描述 投票:0回答:0

我正在为 Angular 单页面应用程序编写一个简单的硒自动化,并集成了浏览器堆栈。该代码在本地运行良好,并且适用于以下平台的 browserstack。

  - os: OS X
    osVersion: Big Sur
    browserName: Safari
    browserVersion: 14.1
  - os: Windows
    osVersion: 10
    browserName: Edge
    browserVersion: latest
  - deviceName: Samsung Galaxy S22 Ultra
    browserName: chrome # Try 'samsung' for Samsung browser
    osVersion: 12.0
  - deviceName: Google Pixel 7
    osVersion: 13.0
    browserName: chrome
    deviceOrientation: landscape

但不适用于 iPhone。

  - deviceName: iPhone 14
    osVersion: 16
    browserName: safari
    deviceOrientation: portrait

这是代码。

var act = new Actions(driver);
var target = driver.findElement(By.cssSelector("[aria-label=\"nav-search-btn\"]"));
target.click();
act.moveToElement(target).build().perform();

iPhone 的错误是

The element identified by "5001" is either not present or it has expired from the internal cache. Try to find it again For documentation on this error, please visit: https://selenium.dev/exceptions/#stale_element_reference Build info: 

它表示元素 5001 不存在或已过期。但这不可能发生,因为我可以在上一行中单击它。

我还可以捕获发送到 browserstack 的内部 API 调用。

这是为了点击,效果很好。

POST /session/xxx/element/5002/click {
  "id": "5002"
}

这是用于 moveToElement 的。

POST /session/xxx/actions -- {
  "actions": [
    {
      "id": "default mouse",
      "type": "pointer",
      "parameters": {
        "pointerType": "mouse"
      },
      "actions": [
        {
          "duration": 100,
          "x": 0,
          "y": 0,
          "type": "pointerMove",
          "origin": {
            "ELEMENT": "5002",
            "element-6066-11e4-a52e-4f735466cecf": "5002"
          }
        }
      ]
    }
  ]
}

似乎该问题仅发生在 moveToElement 和 iPhone 上。

selenium-webdriver appium-ios browserstack browserstack-app-automate
© www.soinside.com 2019 - 2024. All rights reserved.