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

时间:2014-08-19 00:29:12

标签: c# selenium screen-scraping

我需要屏幕抓取使用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编码单元测试成功完成此操作,因为它实际上移动了光标,但我不认为许可将允许我使用该选项以及让它在视觉外运行的烦恼工作室。

2 个答案:

答案 0 :(得分:5)

而不是试图通过偏移来获取元素。确保你知道你以前的焦点是什么......如果没有,那么它应该是页面的左上角。然后把你的睡眠放在中间,你应该能够看到鼠标移动,等待,然后点击。

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

答案 1 :(得分:3)

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