2013-12-11 180 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")); 

工作完成。

非常感谢所有这一切。