【问题标题】:Selenium click on coordinates not clicking where expectedSelenium 点击坐标没有点击预期的位置
【发布时间】:2014-10-11 23:57:54
【问题描述】:

我需要对使用 ActiveX 控件进行导航的网页进行屏幕抓取。这不是用于 ui 测试目的,而是用于从旧版应用程序下载数据。

我遇到的问题是顶部导航是完整的带有 javascript 的 ActiveX,并且不可能通过任何方式获取元素。所以我想在坐标上点击鼠标。

我正在使用以下方法answer by Bergstrom

基本上我在做

var action = new Actions(ieDriver).MoveToElement(ieDriver.FindElement(By.Tag("HTML"))).MoveByOffset(200,100).Click().Perform();

我在调试时确认 ieDriver.FindElement 返回 -1,-1 表示 HTML 标记的位置,因此偏移坐标应该是正确的。

我使用 IE 工具栏测量了坐标。当我运行代码时没有任何反应,所以我假设它在空白处单击。

有没有办法 ping 浏览器,以便我知道坐标在哪里,或者有更好的方法来实现这一点?

我能够使用 VS 编码单元测试成功地做到这一点,因为它实际上会移动光标,但我认为许可不允许我使用该选项以及让它在视觉之外运行的烦恼工作室。

【问题讨论】:

  • 使用.perform() 将您的操作分开,并在它们之间等待。然后你可以看到它实际上将鼠标移动到哪里,而不是一次完成所有操作。
  • 在另一个注意事项中,你为什么要点击一个点?如果您的浏览器上的分辨率发生变化,此步骤将不起作用,因为单击的点将是错误的。不太适合根据用户监视器更改的 Web 应用程序...

标签: c# selenium screen-scraping


【解决方案1】:

我花了大约 2 个小时试图让它工作,我在 iframe 中有一个元素,

请记住,互联网上有很多不起作用的代码示例, 我最终选择了这个,它实际上完全按照它的方式工作:

_driver.SwitchTo().Frame(recaptchaChallengeFrame);

var body = _driver.FindElement(By.XPath(".//body"));

Actions builder = new Actions(_driver);

builder
    .MoveToElement(body, absClickX, absClickY)
    .Click()
    .Build()
    .Perform();

【讨论】:

  • 你拯救了我的一天。我正在寻找解决我的问题的方法。我遇到了按 ID 或其他任何方式查找元素的问题。这个问题是由于我正在查看的 Frame 造成的。你的解决方案在我脑海中打开了管灯。我改变了框架,我得到了我的元素。
【解决方案2】:

而不是试图让一个元素只是移动偏移量。确保你知道你之前的关注点是什么……如果没有,那么它应该是页面的左上角。然后把你的 sleep 放在中间,应该可以看到鼠标移动,等待,然后点击。

Actions action = new Actions(driver);
action.MoveByOffset(200,100).Perform();
Thread.Sleep(10000);
action.Click();

【讨论】:

  • 当我在 google 和其他网站上尝试时,效果很好。不适用于我的目标网站,我认为是因为该网站有几层框架。决定使用 winapi 进行鼠标点击,因为按钮总是在同一个位置。
  • 你是如何使用winapi的?
猜你喜欢
  • 2013-05-24
  • 2020-12-01
  • 2019-08-04
  • 2016-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-17
  • 1970-01-01
相关资源
最近更新 更多