2014-12-31 3 views
0

www.salesforce.com 개발자 로그인 계정의 연락처 생성 페이지 작업 중입니다. 누구든지 무료 개발자 로그인 계정을 만들어이 페이지에 액세스 할 수 있습니다.WebDriver에서 프레임 사이를 전환 할 수 없습니다.

조회 창에서 프레임을 전환 할 수 없습니다. 두 개의 프레임이 있습니다. 하나는 텍스트 상자가있는 검색 프레임과 검색 할 단추이며 아래는 선택을위한 하이퍼 링크가있는 검색 결과를 표시하는 결과 프레임입니다. 프레임 이름 또는 ID로 프레임을 지정하지만 webDriver가 프레임 검색으로 전환하고 검색하지만 NoSuchFrameException을 사용하여 결과 프레임을 찾을 수 없습니다.

처음에는 검색 프레임으로 전환하지 않고 결과 프레임으로 직접 전환하면 기본적으로 최근 검색 결과가 표시된 결과 프레임을 찾는 것이 성공적입니다.

검색 프레임에서 결과 프레임으로 전환하려면 어떻게해야합니까? 아래 감안할 때 defaultContent 또는 메인 프레임으로 전환 한 후 resultsFrame로 전환 resultsFrame 시도로 전환하기 전에 내 코드

public class Acc_Parent 
{ 
    WebDriver driver; 
    FileInputStream fis; 
    XSSFWorkbook wb; 
    XSSFSheet sh; 

    @Test 
    public void createParent() throws IOException, InterruptedException, FileNotFoundException 
    { 
    driver = new FirefoxDriver(); 
    //System.setProperty("webdriver.chrome.driver", "D:/chromedriver_win32/chromedriver.exe"); 
    //driver = new ChromeDriver(); 
    driver.manage().window().maximize(); 
    driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS); 

    driver.get("https://test.salesforce.com"); 
    fis = new FileInputStream("C:/Users/psit/Documents/Login.xlsx"); 
    wb = new XSSFWorkbook(fis); 
    sh = wb.getSheetAt(0); 
    driver.findElement(By.xpath(".//*[@id='username']")).sendKeys(sh.getRow(1).getCell(0).getStringCellValue()); 
    driver.findElement(By.xpath(".//*[@id='password']")).sendKeys(sh.getRow(1).getCell(1).getStringCellValue()); 
    driver.findElement(By.xpath(".//*[@id='Login']")).click(); 

    fis = new FileInputStream("C:/Users/psit/Documents/Input.xlsx"); 
    wb = new XSSFWorkbook(fis); 
    sh = wb.getSheet("Parent"); 

    driver.findElement(By.xpath(".//*[@id='Account_Tab']/a")).click(); 
    driver.findElement(By.xpath(".//*[@id='hotlist']/table/tbody/tr/td[2]/input")).click(); 
    driver.findElement(By.xpath(".//*[@id='j_id0:acctFrm:nmsrch']")).sendKeys(sh.getRow(1).getCell(1).getStringCellValue()); 
    driver.findElement(By.xpath(".//*[@id='j_id0:acctFrm']/div[1]/div[2]/table/tbody/tr/td[2]/input")).click(); 
    try 
    { 
     driver.findElement(By.linkText("click here")).click(); 

     driver.findElement(By.xpath(".//*[@id='parentAcc']")).sendKeys(sh.getRow(1).getCell(1).getStringCellValue()); 
     Thread.sleep(2000); 
     driver.findElement(By.xpath(".//*[@id='childAcc']")).sendKeys(sh.getRow(1).getCell(2).getStringCellValue()); 
     Thread.sleep(2000); 

     driver.findElement(By.xpath(".//*[@id='pg:acc:pb:acctAdd:rptAddFields:0:actFields']")).sendKeys(sh.getRow(1).getCell(3).getStringCellValue()); 
     Thread.sleep(2000); 
     driver.findElement(By.xpath(".//*[@id='pg:acc:pb:acctAdd:rptAddFields:2:actFields']")).sendKeys(sh.getRow(1).getCell(4).getStringCellValue()); 
     Thread.sleep(2000); 
     driver.findElement(By.xpath(".//*[@id='pg:acc:pb:acctAdd:rptAddFields:4:actFields']")).sendKeys(sh.getRow(1).getCell(5).getStringCellValue()); 
     Thread.sleep(2000); 
     driver.findElement(By.xpath(".//*[@id='pg:acc:pb:acctAdd:rptAddFields:6:actFields']")).sendKeys(sh.getRow(1).getCell(6).getStringCellValue()); 
     Thread.sleep(2000); 
     driver.findElement(By.xpath(".//*[@id='pg:acc:pb:acctAdd:rptAddFields:8:actFields']")).sendKeys(Integer.toString((int)sh.getRow(1).getCell(7).getNumericCellValue())); 
     Thread.sleep(2000); 
     driver.findElement(By.xpath(".//*[@id='pg:acc:pb:acctAdd:rptAddFields:1:actFields']")).sendKeys(sh.getRow(1).getCell(8).getStringCellValue()); 
     Thread.sleep(2000); 
     driver.findElement(By.xpath(".//*[@id='pg:acc:pb:acctAdd:rptAddFields:3:actFields']")).sendKeys(sh.getRow(1).getCell(9).getStringCellValue()); 

     String mainWindow = driver.getWindowHandle(); 
     driver.findElement(By.xpath(".//*[@id='pg:acc:pb:acctAdd:rptAddFields:5:actFields_lkwgt']/img")).click(); 
     Thread.sleep(5000); 
     Set<String> winhand = driver.getWindowHandles(); 
     for(String str : winhand) 
     { 
      if(!str.equalsIgnoreCase(mainWindow)) 
      { 
       driver.switchTo().window(str); 
       break; 
      } 
     } 
     try 
     { 

      driver.switchTo().frame("searchFrame"); 
      driver.findElement(By.xpath(".//*[@id='lksrch']")).sendKeys(sh.getRow(1).getCell(10).getStringCellValue()); 
      driver.findElement(By.xpath(".//*[@id='theForm']/div/div[2]/input[2]")).click(); 
      Thread.sleep(5000); 
      driver.switchTo().frame("resultsFrame"); 
      driver.findElement(By.linkText(sh.getRow(1).getCell(10).getStringCellValue())).click(); 
      driver.switchTo().window(mainWindow); 

      driver.findElement(By.xpath(".//*[@id='pg:acc:pb:acctAdd:rptAddFields:7:actFields_lkwgt']/img")).click(); 
      Thread.sleep(5000); 
      Set<String> winhandle = driver.getWindowHandles(); 
      for(String str : winhandle) 
      { 
       if(!str.equalsIgnoreCase(mainWindow)) 
       { 
        driver.switchTo().window(str); 
        break; 
       } 
      } 
      try 
      { 
       driver.switchTo().frame("searchFrame"); 
       driver.findElement(By.xpath(".//*[@id='lksrch']")).sendKeys(sh.getRow(1).getCell(11).getStringCellValue()); 
       driver.findElement(By.xpath(".//*[@id='theForm']/div/div[2]/input[2]")).click(); 
       Thread.sleep(5000); 
       driver.switchTo().frame("resultsFrame"); 
       driver.findElement(By.linkText(sh.getRow(1).getCell(11).getStringCellValue())).click(); 
       driver.switchTo().window(mainWindow); 
      } 
      catch(Exception e) 
      { 
       e.printStackTrace(); 
       System.out.println(); 
       driver.close(); 
       driver.switchTo().window(mainWindow); 
       System.out.println("State/Region not Found"); 
      } 

     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
      System.out.println(); 
      driver.close(); 
      driver.switchTo().window(mainWindow);   
     } 

     driver.findElement(By.xpath(".//*[@id='pg:acc:pb:j_id34:save']")).click(); 
+0

안녕하세요 Deepak, 아래와 같이 vivek에서 설명한 것처럼 defaultContent 메서드를 사용하여 창으로 포커스를 전환 한 다음 resultFrame으로 전환해야합니다. 자세한 설명은이 동영상 "https://www.youtube.com/watch?v=yYv_7-zYz4k" – Uday

답변

1

입니다. webdriver가 현재 상황에서 프레임을 검색합니다. 따라서 searchFrame에서는 resultsFrame을 찾지 않습니다 (둘 다 메인 프레임 아래에있을 수 있음).

희망이 도움이됩니다.

+0

Vivek를 시청하세요. 이 제안은 올바르게 작동했습니다. –

+0

도와 드리겠습니다 ... 건배 친구 ... –

관련 문제