2016-10-09 3 views
1

Я тестирую веб-страницу, содержащую таблицу. Вы можете щелкнуть ссылку «Создать новую», чтобы добавить записи в сетку. После нажатия кнопки «Создать новый» появляется диалоговое окно с некоторыми текстовыми полями, другой сеткой и кнопкой «Отмена» и «Сохранить». Затем вы можете щелкнуть ссылку, чтобы добавить запись в сетку диалога, в результате чего появляется другое диалоговое окно с текстовыми полями и кнопка «Отмена и сохранение». На моем классе уровня тестирования я в данный момент нажимаю на эти кнопки, а затем жду открытия или закрытия диалогового окна. Мне нужно сформулировать общий метод, который включает как щелчок, так и ожидание для каждой кнопки. Поэтому вместо двух строк кода на моем тестовом уровне, чтобы щелкнуть элемент и ждать окна, у меня будет одна строка кода, которая обрабатывает это. Ниже моя дилемма:Если условие оператора, где элемент равно элементу

Мне нужно, чтобы иметь возможность применить If условие, при котором сдавший параметр IWebElement приравнивает определенный IWebElement, но он не позволяет мне сделать это. Заявление if не находит соответствия по какой-либо причине, поэтому код внутри оператора if никогда не будет достигнут. Я что-то упускаю? Если нет, есть ли обходной путь?

ПРИМЕЧАНИЕ: Использование button.text == SaveOrganizationBtn.Text обходной путь, но потерпит неудачу в моем конкретном случае, поскольку некоторые из этих кнопок не может быть загружен в HTML для определенного теста (т.е. форма не была вызвана), поэтому if утверждение не выполняется. Он никогда не сможет захватить свойство Text, потому что он не может найти элемент в первую очередь.

Пример кода:

ClickButton(SaveNetworkBtn); 

public void ClickButton(IWebElement button) 
{ 
    if (button == SaveOrganizationBtn) 
    { 
     SaveOrganizationBtn.Click(); 
     WaitForOrganizationFormToClose(); 
    } 

    if (button == SaveNetworkBtn) 
    { 
     SaveNetworkBtn.Click(); 
     WaitForNetworkFormToClose(); 
    } 
+0

Вы должны проверить равенство между этим значением атрибута вместо строки. –

+0

Я видел, что вы опубликовали ответ, но похоже, что есть лучший способ сделать это. Можете ли вы опубликовать HTML-код двух кнопок и немного описать сценарий? Есть ли какая-то причина, по которой вы не можете просто определить, какая кнопка доступна, и щелкнуть ее, а не сравнить ее с кнопкой, в которую вы вошли? – JeffC

+0

Я обновил исходное сообщение, чтобы включить подробные сведения о приложении. Да, есть причина, по которой я не могу этого сделать, потому что несколько кнопок могут быть «доступны» одновременно. Как пользователь, я хочу, чтобы указать, какую кнопку я нажимаю, из тех, которые доступны –

ответ

0

Я нашел решение, какое бы оно ни было неудобно. Я отмечу это как ответ, если никто другой не обеспечит лучшего решения.

ClickButton(SaveNetworkBtn); 

public bool ClickButton(IWebElement button) 
{ 

bool buttonClicked = false; 

    if (Driver.FindElements(By.Id("SaveOrg-Button-ID")).Count > 1) 
    { 
      if (button == SaveOrganizationBtn) 
      { 
       SaveOrganizationBtn.Click(); 
       WaitForOrganizationFormToClose(); 
       buttonClicked = true; 
       return buttonClicked; 
      } 
    } 

    if (Driver.FindElements(By.Id("SaveNet-Button-ID")).Count > 1) 
    { 
      if (button == SaveNetworkBtn) 
      { 
       SaveNetworkBtn.Click(); 
       WaitForNetworkFormToClose(); 
       buttonClicked = true; 
       return buttonClicked; 
      } 
    } 

return buttonClicked; 
} 
+0

Небольшая оптимизация: вы можете удалить переменную 'buttonClicked'. Вы можете просто вернуть true, 'внутри' if '' и 'return false'' в нижней части функции. – JeffC

+0

Вы действительно хотите проверить '.Count> 1' вместо' .Count> 0'? – JeffC

+0

Нет. Все, что я хочу сделать, это продолжить условный оператор, если этот элемент By.ID найден –

0

Используйте метод Equals() для сценария. == не будет работать для этого. вам нужно проверить его как if(button.Equals(SaveOrganizationBtn)). Результатом этого будет true, если это тот же самый объект, он вернет false.

Надеюсь, это поможет вам.

+0

альтернативно вы можете использовать 'button.GetType() == typeof (ClassBtn)' – ajdrausal

+0

Это не работает. Msgstr "Не удалось найти тип или пространство имен SaveOrganizationBtn".Даже если это сработало, операторы If не будут отличать каждый IWebElement, он проверяет только тип, и все они одинаковы. Тип –

+0

Я думаю, что 'SaveOrganizationBtn' является' Id' кнопки. Я думал, что это класс. В этом случае этот ответ не будет работать вообще, вы можете попробовать метод 'Equals' для проверки того, что оба являются одним и тем же объектом. Я скоро отредактирую ответ. Спасибо – vivek

0

Я не совсем понимаю ваш сценарий, но похоже, что что-то подобное может сработать ... вам придется решить. Вместо того, чтобы проходить в button, просто проверьте, существует ли кнопка на странице, если она ... щелкните по ней.

ClickButton(); 

public bool ClickButton() 
{ 
    IReadOnlyCollection<IWebElement> saveOrg = Driver.FindElements(By.Id("SaveOrg-Button-ID")); 
    if (saveOrg.Any()) 
    { 
     saveOrg.ElementAt(0).Click(); 
     WaitForOrganizationFormToClose(); 
     return true; 
    } 

    IReadOnlyCollection<IWebElement> saveNet = Driver.FindElements(By.Id("SaveNet-Button-ID")); 
    if (saveNet.Any()) 
    { 
     saveNet.ElementAt(0).Click(); 
     WaitForNetworkFormToClose(); 
     return true; 
    } 

    return false; 
} 

Примечание: .Any() работает так же, как .Count > 0, я нашел некоторое время назад и как это немного лучше, но это личное предпочтение.

+0

Щелчок по любой доступной кнопке не является моим намерением, так что это не сработает. Я хочу указать, какую кнопку я нажимаю. Одновременно может быть доступно несколько кнопок. то есть кнопки «Отмена» и «Сохранить» –

+0

Имеются ли кнопки отмены и сохранения одинакового идентификатора? Этот код не нажимает на любую доступную кнопку ... он нажимает одну из двух кнопок с определенными идентификаторами. Более подробная информация о соответствующем HTML поможет найти решение здесь. – JeffC

+0

Мне жаль, я хотел сказать, что я не хочу, чтобы он нажимал «каждую кнопку, которая доступна в html в то время». Вот как выглядит ваш код выше. Если он найдет эту кнопку по идентификатору, она нажимает на нее. Поэтому, если доступны кнопки SaveNet и SaveOrg, они будут нажимать на них обоих. Если вы проверите мое опубликованное решение, вот почему у меня есть вложенный оператор If, чтобы указать, какой из них щелкнуть –

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