我试图让 Selenium,特别是 WebDriver v2.31,与谷歌地图交互。我可以点击 [first] Get Directions 按钮输入一对地址,然后单击两个地址下的 Get Directions 按钮。这导致了一组行驶方向。我不能做的是让 Selenium 滚动到“方向”面板的底部,这样我就可以看到目的地和“保存到我的地图”链接。不知道是不是因为滚动条是浏览器产生的问题。
我可以在 Yahoo! 上进行搜索 并滚动到结果网页的底部;我认为这是因为网页架构中没有其他框架或面板。尽管如此,浏览器生成的是滚动条,而不是网页。
我可以用鼠标按住并向下拖动滚动条来构建一个动作。我不喜欢这种解决方案,因为如果页面大小不同或面板大小不同,执行此操作会导致大量重新计算。我更喜欢类似于 Yahoo! 中的单个“文档”窗口的解决方案。或谷歌代码。
任何帮助将不胜感激。在过去的三天里,我一直在互联网上绞尽脑汁寻找解决方案。
谢谢。
史蒂夫
附录:如下所述。我不是想对地图本身做任何事情,而是对包含方向的面板做任何事情。我正在使用 Google 地图,因为它类似于我稍后必须测试的应用程序。我需要能够让 [Selenium] WebDriver 滚动到面板底部,这样我就可以选择“下一步”链接——就像滚动到 Google 地图中的“方向”面板底部并在底部看到“保存”链接一样。
我不确定在使用术语面板时是否使用了正确的术语。问题在于,当显示网页时,面板会动态生成滚动条。
driver.switchTo().frame(driver.findElement(By.id("spsizer")));
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("javascript:window.scrollBy(250,750)", element);
driver.switchTo().defaultContent();
不幸的是,“面板”不包含在框架中或者是框架......由 Selenium 返回的异常标识:
Exception in thread "main" org.openqa.selenium.NoSuchFrameException: Element is not a frame element: DIV
我相信我已经确定该面板具有使用 FireBug 的 ID(“spsizer”)。
这也不起作用:
element = driver.findElement(By.id("spsizer"));
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("javascript:window.scrollBy(250,750)", element);
这只是在不滚动到“方向”面板底部的情况下执行,但它也不会引发异常。