#c# #selenium #nested-loops
#c# #selenium #вложенные циклы
Вопрос:
Мне нужно написать условный оператор, который проверял бы, присутствует ли L tab.
- если вкладка L отсутствует, будет выведено «L ОТСУТСТВУЕТ».
- Если присутствует L, выводится «L присутствует» и проверяется, присутствуют ли вкладки S, C и K:
- Если S присутствует, то будет выведено «S присутствует», иначе «S отсутствует.
- Если присутствует C, то будет выведено «C присутствует», иначе «C отсутствует»,
- …и то же самое для K.
У меня есть следующий написанный код, но по какой-то причине код мне не нравится. Любые идеи будут высоко оценены. Спасибо!
if (Sel.IsElementPresent(arrObj1[4]))
{
Lib.WriteDebugLogs("Test 1: General", "NORMAL", "L tab present in home page");
Sel.Click(arrObj1[4]);
if (Sel.IsElementPresent(arrObj1[5]))
{
Lib.WriteDebugLogs("Test 1: General", "NORMAL", "S tab present under L tab.");
}
if (Sel.IsElementPresent(arrObj1[6]))
{
Lib.WriteDebugLogs("Test 1: General", "NORMAL", "C tab present under L tab.");
}
if (Sel.IsElementPresent(arrObj1[7]))
{
Lib.WriteDebugLogs("Test 1: General", "NORMAL", "K tab present under L tab.");
}
}
else
{
s = "'L' tab is not displayed in the home page.";
arrTestResults[6] = arrTestResults[7] = s;
Lib.WriteDebugLogs("Test 1: General", "****ERROR****", "Could noT find the L tab");
}
Комментарии:
1. Одна очень простая вещь, позволяющая сделать код более читабельным, — это заменить
arrObj1[x]
на самокомментирующийся идентификатор (например, такую переменную, какtabK
) — возможно, это было бы сделано ВООБЩЕ БЕЗ использованияarrObj1
массива…
Ответ №1:
Вы практически никогда не должны ссылаться на значения внутри массива с помощью «магических констант», которые, как вам известно, относятся к конкретным элементам. Итак, я собираюсь предположить, что где-то перед вызовом этого метода кто-то сделал что-то вроде этого:
var tabs = new[] {
new Tab{Name = "L", ParentName= "home page", Identifier = arrObj1[4],
// and so on for the tabs you care about.
};
Таким образом, первая часть вашего метода может быть заменена методом, который участвует только в отображении информации о том, какие вкладки отображаются:
public void LogDisplayedTabs(IEnumerable<Tab> tabs)
{
for(var tab in tabs)
{
if (Sel.IsElementPresent(tab.Identifier))
{
Lib.WriteDebugLogs("Test 1: General", "NORMAL",
string.Format("{0} tab present under {1} tab.", tab.Name, tab.ParentName));
}
}
}
Сейчас у меня нет времени рассматривать остальную часть метода, но этот шаблон должен помочь вам выяснить, как исправить остальное.