2017-07-20 68 views
0

我們使用IE和Java運行Selenium。點擊網頁上的鏈接打開一個新的IE頁面,這顯然不是IE驅動程序的子頁面,所以我不能做一個driver.switchTo();該頁面是一個空白文件名和一個確定按鈕的表單。上一頁開發商製造了一個機器人類,並送出9個TAB按鍵事件才能到OK按鈕,然後一個在Selenium和IE中使用Java Robot類

robot.keyPress(KeyEvent.VK_ENTER); 
    robot.keyRelease(KeyEvent.VK_ENTER); 

現在我需要更改文件名中的價值,所以我算TABS的數量,直到練到該文件,然後做一個退格,然後鍵入類似這樣的文件名:

    for (int ic = 0; ic < filePrefix.length(); ic++) { 
          char ch = filePrefix.charAt(ic); 
          int kc = KeyEvent.getExtendedKeyCodeForChar(ch); 
          System.out.println("Sending " + ch + "[" + kc + "]"); 
          if (ch >= 'A' && ch <= 'Z') { 
           robot.keyPress(KeyEvent.VK_SHIFT); 
          } 
          robot.keyPress(kc); 
          robot.keyRelease(kc); 
          if (ch >= 'A' && ch <= 'Z') { 
           robot.keyRelease(KeyEvent.VK_SHIFT); 
          } 
          Thread.sleep(500); 
         } 

此工程在我的機器上,但我相信我們第一次跑這只是停頓了一下,當我點擊網頁它問我是否想讓機器人改變文字。

問題是,這將在詹金斯運行,沒有人會在那裏回答這個問題,關於允許機器人訪問文本。此外,我知道在Selenium網格上運行時,Robot不是很可靠。

所以我想,首先是有一個啓動IE瀏覽器,讓機器人來讀取和修改文本>

其次,將即使在硒網格(遠程)的工作方式?

更妙的是,我們如何才能讓IE的驅動程序能夠訪問此頁面,所以我可以用很簡單的XPath,而不是機器人擺在首位(我認爲這是不可能的)?

哦,不幸的是,對於這個網站,我們需要IE瀏覽器,不能使用Chrome或Firefox。

+0

我不認爲我在購買由Selenium控制的另一個實例啓動的瀏覽器實例無法訪問的想法。你確定你完全測試過嗎?我以前從來沒有見過。在訪問它之前,您可能需要等待一段時間才能確保新的瀏覽器實例已完全加載。你能分享這個網站嗎,這樣我們可以測試一些東西嗎? – JeffC

+0

不幸的是它在我們公司的防火牆內,否則我會。外面沒有訪問權限。至於進入這個窗口,一個非常有知識的人告訴我同樣的事情,你不能這樣做。我們有功能讓你拍攝一個窗口快照,點擊一個鏈接,然後等待新窗口並切換到它,所以它應該等待,直到有一個新窗口並且窗口完成。但是我甚至在睡眠之後做了一種(對於String id:driver.getWindowHandles()),並切換到每個窗口,嘗試查找元素,甚至切換到任何幀。 Nothing wor – Tony

+0

ked(對不起,我跑了上面的字符) – Tony

回答

0

下面是一個真正簡單的測試,以確保您說的是真實的。此代碼使用測試站點來等待加載新窗口。您可以使用此代碼,爲啓動新窗口的鏈接/按鈕/事物添加您自己的URL和定位器,並查看Selenium是否檢測到新窗口啓動。

String url = "http://the-internet.herokuapp.com/windows"; 
driver.navigate().to(url); 
int currentWindows = driver.getWindowHandles().size(); 
driver.findElement(By.linkText("Click Here")).click(); 
WebDriverWait wait = new WebDriverWait(driver, 30); 
wait.until(ExpectedConditions.numberOfWindowsToBe(currentWindows + 1)); 
System.out.println("Found a 2nd window"); 

如果有效,您應該在控制檯中看到Found a 2nd window。如果沒有,你應該看到一個TimeoutException

+0

我會試試。我一直在想。窗口句柄被返回到一個不一定排序的集合中。如果有多個窗口句柄,你如何確定哪一個是最後一個打開的?我認爲這不一定是迭代集合時返回的最後一個? – Tony

+0

正確。 「集合」不保證在Java中排序。在打開新窗口之前,您可以抓住'Set',然後在窗口打開後找到不在'Set'之前的句柄,那就是新窗口。 – JeffC

+0

引起:org.openqa.selenium.TimeoutException:等待打開窗口的數量爲30秒後超時3 – Tony

相關問題