Selenium单击坐标,而不是单击预期的位置

本文关键字:单击 位置 坐标 Selenium | 更新日期: 2023-09-27 18:18:29

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

我的问题是顶部导航是完整的ActiveX与javascript,是不可能得到任何元素。所以我尝试在坐标处进行鼠标点击。

我正在使用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 code Unit Test成功地做到这一点,因为它实际上移动了光标,但我不认为许可将允许我使用该选项以及让它在visual studio之外运行的烦恼。

Selenium单击坐标,而不是单击预期的位置

我花了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();

不是通过偏移量来获取元素。确保你知道你的优先重点是什么……如果没有,那么它应该在页面的左上角。然后把你的睡眠放在中间,你应该可以看到鼠标移动,等待,然后点击。

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