2016-06-19 3 views
0

다음은 내 코드입니다 : -수 없습니다

입니다 내가 뭘하려고
package Practice; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 

public class Day6FramesRecap { 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    WebDriver driver = new FirefoxDriver(); 
    driver.get("https://www.google.com/recaptcha/api2/demo"); 
    int framenumber = frameset(driver,By.xpath(".//*[@id='recaptcha-anchor']/div[5]")); 
    driver.switchTo().frame(framenumber); 
    driver.findElement(By.xpath(".//*[@id='recaptcha-anchor']/div[5]")).click(); 
    driver.switchTo().defaultContent(); 
    try{ 
     Thread.sleep(1000); 
     }catch(InterruptedException e){ 
     e.printStackTrace(); 
     } 
    int framenumber2 = frameset(driver,By.xpath(".//*[@id='recaptcha-verify-button']")); 
    driver.switchTo().frame(framenumber2); 
    driver.findElement(By.xpath(".//*[@id='recaptcha-verify-button']")).click(); 


} 
public static int frameset(WebDriver driver, By by) 
{ 
    int i; 
    int framecount= driver.findElements(By.tagName("iframe")).size(); 
    for(i=0;i<framecount;i++) 
    { 
     driver.switchTo().frame(i); 

     int count = driver.findElements(by).size(); 
     if(count>0) 
     { 
      break; 

     } 
     else 
     { 
      System.out.println("Continue Looping"); 
     } 
    } 
    driver.switchTo().defaultContent(); 
    return i; 
} 

} 

, 각 프레임을 반복하고 내가 필요로하는 요소를 찾기 위해 루프를 위해 사용합니다. 그러나, 나는 By.xpath(".//*[@id='recaptcha-anchor']/div[5] 즉 첫 번째 요소를 찾을 수 있어요 그를 클릭 한 후, 나는 By.xpath(".//*[@id='recaptcha-verify-button']

내가 그 내용의 오류가 발생하는 두 번째 요소를 클릭 할 수없는입니다 : - 스레드

예외 "main" org.openqa.selenium.NoSuchElementException : 찾을 수 없습니다 요소 : { "method": "xpath", "selector": ".//*[@ id = 'recaptcha-verify-button']" }

답변

1

전환 할 수 있습니다. WebElements를 사용하여 iframe을 만듭니다. 다음 코드를 시도해 볼 수 있습니다.

public static void main(String args[]) throws InterruptedException 
{ 

     WebDriver driver = new FirefoxDriver(); 
     driver.get("https://www.google.com/recaptcha/api2/demo"); 

     WebElement frame = driver.findElement(By.xpath(".//iframe[@title='recaptcha widget']")); 

     driver.switchTo().frame(frame); 

     driver.findElement(By.xpath(".//*[@id='recaptcha-anchor']/div[5]")).click(); 
     driver.switchTo().defaultContent(); 

     Thread.sleep(2000); 

     WebElement frame1 = driver.findElement(By.xpath(".//iframe[@title='recaptcha challenge']")); 
     driver.switchTo().frame(frame1); 
     driver.findElement(By.xpath(".//*[@id='recaptcha-verify-button']")).click(); // this will click on the [Verify] button. 
} 
+0

나는이 접근법에 대해 몰랐습니다. 감사합니다. – Khan