2016-09-22 7 views
0

開始ページ[リンク] http://imgur.comのサインインリンクをクリックすると、ユーザ名とパスワードフィールドのモーダルウィンドウが表示されます。私は結果のページでパスワードフィールドを抽出しようとしていましたが、ユーザー名とパスワードフィールドの要素が見つかりませんでした。その瞬間にdriver.getPageSource();を使ってソースコードをチェックしても、ユーザー名やパスワードの要素の兆候はありません。以下は、指定されたURLからパスワードフィールドを抽出するコードです。CSSセレクタを使用してモーダルウィンドウでパスワードフィールドを抽出できません - Selenium Java

pwd = driver.findElement(By.cssSelector("input[type='password']")); 

私は以下に示すように、各iframe内のパスワードフィールドを探し始めてモーダルウィンドウをクリックするためのコードが

driver.findElement(By.partialLinkText("sign in")).click(); 

後、私は、彼らはアイフレームを使用していることが判明しました。

List<WebElement> iFrames = null; 
       WebElement iFramePwd=null; 

       iFrames = driver.findElements(By.tagName("iframe")); 
       if (iFrames.size() > 0) { 
        for (int l = 0; l < iFrames.size(); l++) { 
         try{ driver.switchTo().frame(l); 

         } 
         catch(NoSuchFrameException ljn){ 
          System.out.println(ljn); 
        driver.switchTo().defaultContent(); 
        continue; 
         } 
         try { 
          try{ 
          iFramePwd = driver.findElement(By.cssSelector("input[type='password']")); 
          } 
          catch(NoSuchElementException lkn){ 
           System.out.println(lkn); 
           driver.switchTo().defaultContent(); 
           continue; 
          } 
5として表示のiframeの

サイズが、私はいつもNoSuchFrameExceptionを得るのiFrameのIAMに切り替えてみてください。 ソースコードを分析するために指定されたURLにアクセスしてください。私はどこにポイントがないのかわかりません。モーダルウィンドウからパスワードフィールドを取得する方法はありますか?どんな助けでも大歓迎です。事前

+0

が見える、最初にこれを選択します。また、あなたのコードスニペットに従って、 'xpath'が' css'でなくてはならない戦略によって見つけられるべきです。そしてそれは 'input [@ type = 'password']'を持っていなければなりません、タイプ属性値にアクセスする '@'がありません。 – Rao

+0

フレームに切り替えると、私は常にNoSuchElementExceptionを実行しています。私はどこで間違っているのか分かりません。 – user6847225

答えて

0

のおかげで、我々はインラインフレームに到達するためにループを使用している場合は、問題がある

WebDriver driver = new FirefoxDriver(); 
    driver.get("http://imgur.com/"); 
    driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS); 
    driver.manage().window().maximize(); 
    driver.findElement(By.partialLinkText("sign in")).click(); 
    WebDriverWait wait = new WebDriverWait(driver, 30); 
    wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.className("cboxIframe"))); 

    wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("f"))); 
    driver.findElement(By.name("username")).sendKeys("abcd"); 
    driver.findElement(By.xpath(".//*[@id='password']/input")).sendKeys("abcd"); 

    driver.close(); 
    driver.quit(); 

このコードを試してみてください。どの要素がiframeであるのかわからないのは、Web要素のListがページ内のiframeの正確な順序を与えないからです。コードを以下の実施例のために働いて、エラーを示す「要素は、現在のものとは異なるフレームに属している - それを使用するために、それを含むフレームにスイッチ」されていない別のフレームにいるような

List<WebElement> my_iframes = driver.findElements(By.tagName("iframe")); 
    // moving to inner iframe 
    if(my_iframes.size() > 0){ 
     for(WebElement my_iframe : my_iframes){ 
      wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(my_iframe)); 
     } 
    } 
    driver.findElement(By.name("username")).sendKeys("abcd"); 
    driver.findElement(By.xpath(".//*[@id='password']/input")).sendKeys("abcd"); 
関連する問題