2013-12-11 172 views
1

我在Junit 4.11中使用WebDriver,並且我想斷言默認情況下未選中複選框,並且要確定選擇哪種構造方法。默認情況下,WebDriver與Junit默認選中複選框

以下是從DOM的複選框被選中之前:

<input type="checkbox" id="c234" name="instantAd" value="true" class="t-checkbox-A"> 

然後,一旦複選框變爲選擇了「檢查」被添加,像這樣:

<input type="checkbox" id="c234" name="instantAd" value="true" checked="" class="t-checkbox-A"> 

我試圖如下:

WebElement checkBox = chrome.findElement(By.cssSelector("input.t-checkbox-A[name=\"instantAd\"]")); 

    new WebDriverWait(chrome, 5).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("input.t-checkbox-A[name=\"instantAd\"]"))); 

    Assert.assertEquals("null",checkBox.getAttribute("checked")); 

    checkBox.click(); 

    Assert.assertEquals("true",checkBox.getAttribute("checked")); 

第一個斷言失敗。也許這是因爲'checked'屬性在DOM中不可見,只能猜測。

堆棧跟蹤顯示的是:

java.lang.AssertionError: expected: java.lang.String but was: null

我已經搜查了許多不同的職位,但沒有給我答案林尋找,並檢查http://junit.sourceforge.net/javadoc/org/junit/Assert.html的信息和指導時,(作爲新測試自動化,即時通訊發現很難找出什麼,我需要在我的構造。

任何幫助將非常感激。

+1

嘗試使用'.isSelected()'方法。所以通過'assertTrue'而不是'assertEquals'進行驗證。這就是我們如何在Python中完成的,我想它在Java中會類似嗎? –

回答

0

有一種不太可取的方式來實現這一目標,比@馬克建議。(有關案件時isSelected( )做es不工作)。

boolean isFound = false; 
try { 
    isFound = driver.findElement(By.cssSelector("input.t-checkbox-A[name=\"instantAd\"][checked]")).isDisplayed(); 
} catch (NoSuchElementException e) { 
// Do nothing 
} 
Assert.assertFalse(isFound); 
checkBox.click(); 
try { 
    isFound = driver.findElement(By.cssSelector("input.t-checkbox-A[name=\"instantAd\"][checked]")).isDisplayed(); 
} catch (NoSuchElementException e) { 
// Do nothing 
} 
Assert.assertTrue(isFound); 

總之,代碼試圖驗證是否顯示帶有「checked」屬性的元素。如果是,那麼isFound設置爲true,否則isFound仍然假

有缺點:

  • 太多的代碼
  • 測試將拋出NoSuchElementException異常時,該元素是前花5秒鐘未找到

「try」子句可以外化爲單獨的方法。

+0

感謝您的回覆@Vlad。Bachurin雖然當我運行代碼時第二個斷言失敗了。如果我使用的代碼較少,那麼你說的代碼很多,並且需要幾秒鐘才能運行,所以我可能找到了另一種方法。我會把它作爲答案發布。 –

0

在SQA Stackexchange的@Francis的幫助下,我設法解決了這個問題,以斷言一個複選框被默認取消選擇。

,我寫了(張貼在上面我的問題),包含下面的斷言代碼:

Assert.assertEquals("null",checkBox.getAttribute("checked")); 

我需要什麼樣的(再次感謝弗朗西斯表明這種方法)是低於assertNull:

Assert.assertNull(checkBox.getAttribute("checked")); 

工作完成。

非常感謝所有這一切。