Это действительно зависит от вашей фактической логики. И я боюсь, что этот вопрос может стать помеченным, поскольку он может быть «слишком общим».
Тем не менее, существует множество способов приблизиться к проверке нескольких состояний.
Если вы ожидаете получить только один результат при нескольких проверках (то есть вы ожидали бы, что EITIER PersonalPolicy, FarmOwnersPolicy или SelectoMaticPolicy будет возвращен), лично я бы, вероятно, установил переменную PolicyType и выполнил на ней инструкцию switch. Пример:
switch(PolicyType){
case "PersonalPolicy":
// Code specific to PersonalPolicy
break; // Don't forget to break unless you want to use "fallthrough logic"
case "FarmOwnersPolicy":
// Code specific to PersonalPolicy
break ;
case default:
// Code for "any-other-than" cases :)
break;
}
Однако для такого подхода осуществимый в вашем случае, вы должны иметь свой отдельный Bools решить какой-то эквивалент выполнения уровня или ошибки уровня.
Это, однако, также можно связать несколько условных выражений с более крупным заявлением. Наиболее распространенными примерами являются: & & или || между каждым заявлением подразумевается «И» или «ИЛИ». Применение особенно обратной логики к OR-заявления может оказаться мощным при сравнении нескольких Bools
Пример:
if (PersonalPolicy) { }
else { }
if (FarmOwnersPolicy && !SelectomaticPolicy) {
//Will only be executed if FarmOwnersPolicy is True AND SelectomaticPolicy is NOT true.
}
if (!FarmOwnersPolicy && !SelectomaticPolicy) {
// Will only be executed if FarmOwnersPolicy AND SelectomaticPolicy are both unset
}
if (!FarmOwnersPolicy || !SelectomaticPolicy) {
// Will be executed if either FarmOwnersPolicy OR SelectomaticPolicy is unset
}
Этот последний подход может быть более полезным, когда у вас есть несколько условий, которые будут проверяться сразу и обеспечивают потенциальную читаемость, противоположную бесконечной полосе if-else.
Если у меня есть «бесконечное количество проверок», я обычно пытаюсь разбить каждый «набор» булевых проверок в блоках и одну результирующую переменную.
Его трудно дать хороший пример для этого, но представьте, что у нас была бы форма huuuuge (для простоты), где есть раздел адреса и т. Д. Сначала я могу сначала проверить всю адресную информацию и соединить это с «AddressValid» bool, просто для улучшения удобочитаемости в следующих разделах :) Кроме того, если одна часть этой последовательной логики bool сломается, это может быть меньше проблем с чтением в «то, что этот код делал», когда у вас нет немного коснулся этого кода.
Edit:
Там же (троичный) оператор Условный. При использовании в следующем примере:
TestCase ? Value1 : Value2;
это приводит к следующей логике:
If (TestCase){
return Value1;
}
Else {
return Value2;
}
я использую это «все время» для установки по умолчанию и значения, или возвращать некоторые переменные default- когда он не содержит значения, которое я ожидал бы.
Определите свои элементы согласно POM, например. '[FindsBy (How = How.ID, Using =" cphMain_BLAHBLAHBLAHType_1 ")] public IWebElement RandomClickableElement;'. Затем назовите его «RandomClickableElement.Click();« –
»Я не знаю, можно ли переписать это, чтобы не использовать столько условий, но я думаю, вы могли бы свести к минимуму код, который вам нужно написать, извлекая код внутри if else в отдельном методе, который делает driver.find ... и добавляет строку параметров к уже существующей строке, которую вы используете для клика. Таким образом, вы будете писать меньше кода. – meJustAndrew
@meJustAndrew Хорошо, что помогает, да, часть проблемы заключается в том, как долго код, когда у меня так много вариантов, я пытаюсь найти как можно больше способов минимизировать, сколько мне нужно писать. –