2017-02-13 44 views
1

我正試圖在新選項卡上讀取對象,但驅動程序的重點不在於此。這裏是一個場景: 1.打開Gmail。 2.點擊Gmail網站下方的「期限」鏈接。新標籤頁將打開。 3.從術語鏈接的新選項卡中讀取任何對象。無法在硒瀏覽器中的新標籤中設置焦點?

無法執行步驟3.下面是代碼

WebDriver driver= new ChromeDriver(); 
    driver.get("http://gmail.com"); 
    driver.manage().window().maximize(); 
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
    Thread.sleep(2000); 

    String Mainwindow = driver.getWindowHandle(); 

    boolean Term = driver.findElement(By.xpath("//*[@id='footer-list']/li[3]/a")).isDisplayed(); 
    if(Term){ 
     driver.findElement(By.xpath("//*[@id='footer-list']/li[3]/a")).click(); 
    } 
    else{ 
     driver.findElement(By.xpath("html/body/footer/div/div[5]/div[1]/a[4]")).click(); 
     // this is written for IE and Mozila 
    } 

    Set<String> set = driver.getWindowHandles(); 
    System.out.println(set.size()); 

    Iterator<String> it = set.iterator(); 
    String main =it.next(); 
    String maintab =it.next(); 
    System.out.println(maintab); 



    driver.switchTo().window(maintab); 
    Thread.sleep(10000); 
    driver.findElement(By.xpath("//*[@id='maia-nav-y']/ul/li[1]")).sendKeys(Keys.PAGE_DOWN); 
    Thread.sleep(3000); 
    driver.findElement(By.xpath(".//*[@id='maia-nav-y']/ul/li[1]")).sendKeys(Keys.PAGE_UP); 
    Thread.sleep(3000); 
    driver.findElement(By.xpath(".//*[@id='maia-nav-y']/ul/li[1]")).sendKeys(Keys.BACK_SPACE); 

    driver.switchTo().window(main); 


     }} 

回答

1

使用數組列表,而不是設置。由於Set通過使用稱爲散列的機制來存儲元素。所以字符串'main'或'mainTab'可能沒有右側窗口句柄來切換。

0

Webdriver已成功切換到新選項卡。但是,您試圖在不是輸入元素的控件上調用sendKeys API。

如果你只是想滾動頁面的新選項卡下,上,你可以做到這一點使用JavascriptExecutor,如在下面的代碼:

WebDriver driver= new ChromeDriver(); 
driver.get("http://gmail.com"); 
driver.manage().window().maximize(); 
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
Thread.sleep(2000); 

String Mainwindow = driver.getWindowHandle(); 



boolean Term = driver.findElement(By.xpath("//*[@id='footer-list']/li[3]/a")).isDisplayed(); 
    if(Term){ 
      driver.findElement(By.xpath("//*[@id='footer-list']/li[3]/a")).click(); 
    } 
    else{ 
     driver.findElement(By.xpath("html/body/footer/div/div[5]/div[1]/a[4]")).click(); 
       // this is written for IE and Mozila 
} 

Set<String> set = driver.getWindowHandles(); 
System.out.println(set.size()); 

Iterator<String> it = set.iterator(); 
String main =it.next(); 
String maintab =it.next(); 
System.out.println(maintab); 



driver.switchTo().window(maintab); 
Thread.sleep(10000); 

//Using JavaScriptExecutor 
//Scroll page down 
JavascriptExecutor jscriptExec = (JavascriptExecutor)driver; 
jscriptExec.executeScript("window.scrollBy(0,250)", ""); 

//Scroll page up 
jscriptExec.executeScript("window.scrollBy(0,-250)", ""); 



//driver.findElement(By.xpath("//*[@id='maia-nav-y']/ul/li[1]")).sendKeys(Keys.PAGE_DOWN); 
//Thread.sleep(3000); 
//driver.findElement(By.xpath(".//*[@id='maia-nav-y']/ul/li[1]")).sendKeys(Keys.PAGE_UP); 
//Thread.sleep(3000); 
//driver.findElement(By.xpath(".//*[@id='maia-nav-y']/ul/li[1]")).sendKeys(Keys.BACK_SPACE); 

driver.switchTo().window(main); 

driver.quit(); 
+0

將它的事項?我需要調用鍵盤的方法他的網頁只能通過API的SendKeys算得上 –

+0

請幫忙的工作狀態 –

+0

作爲提供代碼,不存在'的input'元素第二個ta b,'sendKeys'會拋出錯誤。然而,如果你只是想上下滾動頁面,我已經展示了在我更新的答案中實現這一點的方法之一。讓我知道,如果你有任何進一步的疑問。 – Mahipal

0

可能是你需要去嘗試這樣的:

driver.switchTo().window("windowName"); 
相關問題