0

小さなJavaアプリを作ろうとしています。大学のポータルにログインできるように、次のコードで Selenium を使用しました。

 //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を持つ要素があると確信しています。また、使用した(By)クラスのメソッドが何であれ、同じ結果が得られます。
ただし、ターゲットを任意のリンク (たとえば、「http://www.google.com」または「http://www.facebook.com」) に変更すると、入力 ArrayList (tagName のすべての要素(入力) 対象の html ページにあるもの) 問題の内容と解決方法を教えてください。よろしくお願いします。

4

1 に答える 1

2

タグ入力の要素がゼロである理由は、すべての要素がフレーム タグ内にあるためです。Selenium は現在のウィンドウを見ることができ、frame タグ内で定義されている (つまり、フレームセット内にある) すべての要素は見えません。

要素を表示するには、最初にフレームを切り替える必要があります。これにより、セレンが外側のウィンドウではなくターゲットフレーム内で制御できるようになります。これを試して

driver.swtichTo().frame(0); // this will move selenium control inside first frame
于 2013-01-15T04:19:07.077 に答える