2014-12-31 31 views
0

我正在www.salesforce.com開發人員登錄帳戶中處理聯繫人創建頁面。任何人都可以創建一個免費的開發者登錄帳戶並訪問此頁面。無法在WebDriver中的幀之間切換

我無法在查找窗口中的幀之間切換。有兩個框架,一個是帶有文本框的搜索框,另一個是搜索框,下面是搜索結果框,用於顯示帶有超鏈接的搜索結果以供選擇。我是通過幀名或ID指定幀,但webDriver切換到搜索幀並執行搜索,但無法找到帶有NoSuchFrameException的結果幀。

如果我最初不切換到搜索框架,但直接切換到結果框架,它確實成功地定位了顯示默認情況下最近執行的一些搜索結果的結果框架。

如何從搜索框切換到結果框?下面給出的是我的代碼

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

Hi Deepak,正如vivek在下面說的,您首先需要使用defaultContent方法將焦點切換到窗口,然後切換到resultFrame。有關詳細說明,請觀看此視頻「https://www.youtube.com/watch?v=yYv_7-zYz4k」 – Uday

回答

1

切換到resultsFrame嘗試切換到defaultContent或您的主框架,然後切換到resultsFrame之前。事情是webdriver在當前的上下文中搜索框架。所以在searchFrame下它永遠不會找到resultsFrame(因爲兩者都可能在主框架下)。

希望這會有所幫助。

+0

謝謝Vivek。這個建議工作正常。 –

+0

高興地幫助...歡呼夥計... –

相關問題