2013-01-15 130 views
0

我正在嘗試製作一個小型的Java應用程序。可以登錄到我的大學門戶網站,我在下面的代碼中使用硒:Selenium無法找到HTML頁面中的任何元素

//some import statements 
public class Portal{ 
    public Portal(){ 
      File file = new File("C:/chromedriver.exe"); 
      System.setProperty("webdriver.chrome.driver", file.getAbsolutePath()); 

      HtmlUnitDriver driver = new HtmlUnitDriver(); 
      String target = "http://portal.kfupm.edu.sa/cp/home/loginf"; 
      driver.get(target); 

      ArrayList <WebElement> inputs = (ArrayList<WebElement>) driver.findElements(By.tagName("input")); 
      System.out.println(inputs.size()); 
      for(WebElement input : inputs){ 
       System.out.println(input.getAttribute("value") + " " + input.getAttribute("name")); 

      // to insure the link is displaying something 
       ChromeDriver driver1 = new ChromeDriver(); 
       driver1.get(driver.getCurrentUrl()); 

     } 
     public static void main(String [] args){ 
      new Portal(); 
     } 

} 

問題是,當我用這個目標(我的大學門戶)我得到inputs.size()= 0;雖然,我確定有(輸入)tagName的元素。無論我使用的(按)課程的方法如何,我也能得到同樣的結果。但是,當我將目標更改爲任何鏈接(例如:「http://www.google.com」或「http://www.facebook.com」)時,我會在輸入ArrayList中獲取元素(所有元素的標籤名稱(輸入)在目標html頁面中)。可以任何機構告訴我什麼是問題,我該如何解決它?在此先感謝..

回答

2

您找到帶有標籤輸入的零元素是所有元素都位於一個幀標籤內,Selenium能夠看到當前窗口,並且所有在幀標籤內部定義的元素(即在一個框架集合內)都隱藏於其中。首先需要開關框架,以便硒在目標框架內部具有控制,而不在外部窗口。完美試試這個

driver.swtichTo().frame(0); // this will move selenium control inside first frame 
+0

作品,非常感謝你.. – mohabh

+0

只要不使用HtmlUnitDriver它工作正常。當我使用它時,我沒有得到輸入標記的所有元素。我只得到1個元素,而對於其他一些定位器,當我使用HtmlUnitDriver時,我沒有得到任何元素,但是我使用ChromeDriver獲得了它們。在HtmlUnitDriver和ChromeDriver之間切換驅動程序有什麼不同。我非常感謝你的幫助和時間。 – mohabh

+0

可能看起來很愚蠢,但問題是因爲我忘了將JavascriptEnabled設置爲true ..現在它解決了:) – mohabh