2015-04-28 21 views
1

標題編輯:是「Selenium:如何檢查鏈接是否在新標籤中打開?」Selenium:爲什麼.click()在這種情況下不起作用&&如何檢查按鈕是否被點擊?

我需要創建JUnit測試,它應該檢查點擊按鈕是否會導致在新選項卡中打開某個鏈接。 這樣做我遇到了問題:看起來像.click()沒有做它想象的。 下面是HTML的片段:

<div class="small-5 column store-btns"> 
    <a class="google_play_btn" target="_blank" href="https://google.com"> 
     <img class="img-responsive"src="/s/img/buy/google_play_btn_blue.svg" alt> 
    </a> 
    <a class="app_store_btn" target="_blank" href="https://apple.com/"> 
     <img class="img-responsive"src="/s/img/buy/app_store_btn_blue.svg" alt> 
    </a> 
</div> 

編輯:這裏是我的簡單JUnit測試:

@Before 
public void SetUp(){ 
    driver = new SafariDriver(); 
    pause = new WebDriverWait(driver, 2000); 
} 

@After 
public void tearDown(){ 
    driver.close(); 
    driver.quit(); 
} 

@Test: 
public void testLink() throws InterruptedException{ 
    driver.get("http://linktotestedpage"); 
    WebElement googlePlayButton = pause.until(ExpectedConditions.visibilityOfElementLocated(By.className("google_play_btn"))); 
    googlePlayButton.click(); 
    List<String> browserTabs = new ArrayList<String>(driver.getWindowHandles()); 
    driver.switchTo().window(browserTabs.get(1)); 
    String titleGP = driver.getTitle(); 

    Assert.assertTrue("Failure: link is ok", titleGP.equals("Google")); 

我期待有一個新的Safari瀏覽器選項卡googlePlayButton.click();後打開,但司機只是退出。 我看到

IndexOutOfBoundsException: Index 1, Size 1 

我在哪裏錯了? 謝謝。

回答

1

我會因爲windowsHandle是明確無序的,也不能保證最後一個選項卡將是一個索引1

String currentHandle = driver.getWindowHandle(); 
List<String> browserTabs = new ArrayList<String>(driver.getWindowHandles()); 

for (String handle: browserTabs){ 
    if (handle != currentHandle){ 
     driver.switchTo().window(handle); 
     //perform addition action as needed; 
     //when done close the window 
     driver.close(); 
     driver.switchTo().window(currentHandle); 
    } 
} 
String titleGP = driver.getTitle(); 

注意添加額外的檢查:從我的身邊未經測試的代碼

+0

我有你的主意,但事情是'googlePlayButton.click();'實際上不執行一個點擊,並沒有新的標籤打開。 – hdf

+1

然後對'browserTabs'進行計數,看看它是否超過'1'。這應該不夠嗎? – Saifur

+0

對不起,賽福爾,我完全把你的問題題目弄糊塗了。 – hdf

0

只是一個建議, 您可以刪除代碼的tearDown部分。 使瀏覽器保持打開狀態,以檢查選項卡是否隨時打開。 我懷疑是什麼,你可能試圖在它打開之前切換到窗口。

注:應該是一個評論,但沒有聲望呢。

+0

謝謝。該代碼適用於Chrome,但不適用於Safari。所以這是瀏覽器/設置問題,我想。 – hdf

相關問題