我想讓Selenium,特別是WebDriver v2.31與Google Maps進行交互。我只需單擊[第一個]「獲取路線」按鈕即可輸入一對地址,然後單擊兩個地址下的「獲取路線」按鈕。這導致了一組行車路線。我不能做的是讓Selenium滾動到「路線」面板的底部,以便我可以看到目的地和「保存到我的地圖」鏈接。我不知道是否由於瀏覽器生成滾動條而出現問題。讓Selenium WebDriver在谷歌地圖方向面板中向下滾動
我能夠在Yahoo!上執行搜索。並滾動到結果網頁的底部;我認爲這是因爲網頁架構中沒有其他框架或面板。儘管如此,瀏覽器生成了滾動條,而不是網頁。
我可以使用鼠標按住並向下拖動滾動條來構建一個Action。我不喜歡這種解決方案,因爲如果頁面大小不同或面板大小不同,則會導致大量重新計算來執行此操作。我更喜歡與Yahoo!中的單個「文檔」窗口類似的解決方案。或Google代碼。
任何幫助將不勝感激。過去三天,我一直在網上搜尋解決方案。
謝謝。
史蒂夫
附錄: 如下文所述。我不是想要對地圖本身做任何事情,而是試圖對包含方向的面板進行操作。我使用的是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();
不幸的是,「面板」不包含在框架或框架...作爲確定由硒返回的異常:
Exception in thread "main" org.openqa.selenium.NoSuchFrameException: Element is not a frame element: DIV
我相信我已經確定,面板上有ID(「spsizer」)使用FireBug。
這也不起作用:
element = driver.findElement(By.id("spsizer"));
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("javascript:window.scrollBy(250,750)", element);
這只是執行無需滾動即可路線面板的底部,但它也不會拋出異常。
感謝您的建議,但我沒有使用Selenium IDE。當我試圖通過WebDriver選擇鏈接時,我得到一個異常,說鏈接不可見[因爲我沒有滾動到面板的底部]。 – Steve 2013-03-21 19:08:38
試用WebDriver中的邏輯 - C#.Net程序我已更新,它的工作原理。不需要向下滾動WebDriver以識別「保存到我的地圖」網頁鏈接。 – CheryJose 2013-03-22 00:30:05
感謝您的代碼片段。這解決了我的問題(在我必須測試的真實應用程序上)。下面是我落得這樣做: '如果(driver.findElement(By.className( 「// DIV [@類= 'GKN']/A [@類= 'GWT-錨GHN']」))isDisplayed(。 。))\t \t \t \t driver.findElement(By.className( 「// DIV [@類= 'GKN']/A [@類= 'GWT-錨GHN']」))點擊();' 但從長遠來看,我仍然需要弄清楚如何滾動動態生成的滾動條,因爲我可能只需要在面板上部分滾動查看內容即可。 – Steve 2013-03-22 14:22:31