Утвердить все значения li в div в тесте coded UI

#c# #coded-ui-tests

#c# #coded-ui-тесты

Вопрос:

 <div class="validation-summary-errors">
    <span>Please check the following entries:</span>
    <ul>
        <li>Please select a client account</li>
        <li>Please select a beneficiary account</li>
    </ul>
</div>

public virtual T VerifyAmountValidationMessages()
{
    HtmlDiv error = new HtmlDiv(_browserWindow);

    error.SearchProperties[HtmlDiv.PropertyNames.Class] = "validation-summary-errors";
    var errors = error.FindMatchingControls();
    var errorLi = error.GetChildren()[0];
    foreach (var item in errors)
    {
        Assert.IsTrue(item.GetProperty("InnerText").ToString().Contains("Please check the following entries:rnPlease select a client accountrnPlease select a beneficiary account"));
    }
    return (T)this;
}
  

Как я могу перебрать все li и утвердить внутренний текст каждого Li, с помощью getChildren я могу получить доступ к элементу span по отдельности, но я хочу получить доступ к Li по отдельности? Прямо сейчас я утверждаю весь текст, что вообще не является правильным подходом.

Ответ №1:

Элементом ul был бы errors.GetChildren()[0]; вы, если бы они перебирали его дочерние элементы.

 <div class="validation-summary-errors"> 
    <span>Please check the following entries:</span> 
    <ul> 
        <li>Please select a client account</li> 
        <li>Please select a beneficiary account</li> 
    </ul> 
</div> 
  

 public virtual T VerifyAmountValidationMessages()
{
    HtmlDiv error = new HtmlDiv(_browserWindow);
    error.SearchProperties[HtmlDiv.PropertyNames.Class] = "validation-summary-errors"; 
    var errors = error.FindMatchingControls(); 
    var errorul = error.GetChildren()[1];
    foreach (var item in errors
    { 
        // check individual li items
    } 
    return (T)this; 
}
  

Это может показаться хрупким тестом, однако подумайте, будут ли внесены какие-либо изменения в способ отображения ошибок, вам придется переписать тест.

Комментарии:

1. Спасибо за помощь, тогда как я должен это проверить?

2. ИМО, ваш первый метод был на правильном пути, я бы просто использовал ссылку на error (div с validation-summary-errors классом) и убедился, что он содержит все сообщения, которые вам нужно, чтобы он содержал.

3. Извините, что говорю, но я вас не понял.

4. Вы не хотите проверять наличие определенных конструкций (т. Е. <ul> , <li> и т.д.) При тестировании, Это приводит к хрупким тестам, которые завершаются неудачей всякий раз, когда на странице вносятся изменения в дизайн, поэтому в вашем случае, я думаю, тест должен проверить, что элемент с validation-summary-errors классом на нем содержит сообщения об ошибках, которые вас интересуют.

5. Понял вашу точку зрения, но не знаю, как это сделать: D В любом случае спасибо вам за помощь.