2013-12-11 5 views
1

Я использую WebDriver с Junit 4.11, и я хочу утверждать, что по умолчанию флажок не выбран, и для этого я не знаю, какой метод конструктора выбрать ,Утверждение флажка не проверено по умолчанию в 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, по предположению.

StackTrace отображает:

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

Я искал много различных сообщений, но никто не предлагал мне ответ Im ищет, и при проверке http://junit.sourceforge.net/javadoc/org/junit/Assert.html для информации и руководства (как новые для автоматизации тестирования, Im Убедившись, что трудно разобраться, что мне нужно в моем конструкторе.

Любая помощь будет наиболее высокую оценку.

+1

Попробуйте использовать метод '.isSelected() '. Поэтому проверьте с помощью 'assertTrue', а не' assertEquals'. Вот как мы это делаем в Python, я думаю, что это было бы похоже на Java? –

ответ

0

Существует менее предпочтительный способ для достижения этой цели, чем @mark предложил. (в тех случаях, когда IsSelected () делать не работают).

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 устанавливается истина, иначе isFound остается ложным

Есть недостатки:

  • слишком много кода
  • тест будет тратить дополнительные 5 секунд, прежде чем бросать NoSuchElementException, когда элемент не найдено

Предложение «try» может быть выведено из внешнего вида на отдельный метод.

+0

Спасибо за ваш ответ @ Vlad.Бачурин, хотя второе утверждение не срабатывало, когда я запускал код. Вы правы в том, что это много кода и требуется еще несколько секунд, если я использую меньше кода, поэтому я, возможно, нашел другой способ его решения. Я отправлю его в качестве ответа. –

0

С помощью @Francis на SQA Stackexchange мне удалось решить проблему, чтобы утверждать, что флажок отменяется по умолчанию.

код, который я написал (отправил в мой вопрос выше) содержится следующее утверждение:

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

Что мне нужно (опять же, благодаря Фрэнсис для предлагая этот метод) был ниже assertNull:

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

Работа выполнена.

Огромное спасибо всем, кто это изучил.

Смежные вопросы