2016-06-13 31 views
1

我是新来的C#,并试图做一个条件语句,我在检查我的脚本应该选择什么选项在网页上。现在我正在这样做,我已经为每个选项制作了单独的bool语句,而且我还有很长一段时间如果语句检查每个选项。用于多个选项的最有效的条件语句?

bool PersonalPolicy = true; 
bool FarmOwnersPolicy = true; 

if (PersonalPolicy) 
{ 
    driver.FindElement(By.Id("cphMain_ctl_WorkflowManager_Quote_Farm_ctl_Farm_Basic_Policy_Info_radioListCommOrPersonal_0")).Click(); 
} 
else 
{ 
    driver.FindElement(By.Id("cphMain_ctl_WorkflowManager_Quote_Farm_ctl_Farm_Basic_Policy_Info_radioListCommOrPersonal_1")).Click(); 
} 
if (FarmOwnersPolicy) 
{ 
    driver.FindElement(By.Id("cphMain_ctl_WorkflowManager_Quote_Farm_ctl_Farm_Basic_Policy_Info_rdoPolicyType_0")).Click(); 
} 
else if (SelectoMaticPolicy) 
{ 
    driver.FindElement(By.Id("cphMain_ctl_WorkflowManager_Quote_Farm_ctl_Farm_Basic_Policy_Info_rdoPolicyType_1")).Click(); 
} 
else 
{ 
    driver.FindElement(By.Id("cphMain_ctl_WorkflowManager_Quote_Farm_ctl_Farm_Basic_Policy_Info_rdoPolicyType_2")).Click(); 
} 

的问题是对于一些事情,我要检查有一吨的我不想赚一百万布尔语句,并有其他真正长期if语句选项。有一种更简单的方法来设置它的格式吗?

+0

按照POM定义元素,例如, '[FindsBy(How = How.ID,Using =“cphMain_BLAHBLAHBLAHType_1”)] public IWebElement RandomClickableElement;'。然后通过RandomClickableElement.Click()调用它;' –

+0

我不知道这是否可以重写为不使用这么多的条件,但我认为你可以通过提取if语句在一个单独的方法中执行driver.find ...并将一个参数字符串附加到您用来单击的现有字符串。这样你就可以编写更少的代码。 – meJustAndrew

+0

@meJustAndrew好吧,帮助,是的问题的一部分是代码是多少时,有这么多的选项,我试图找到尽可能多的方式来最大限度地减少我有多少写。 –

回答

1

这真的取决于你的实际逻辑。 我担心这个问题可能会被标记,因为它可能“太泛”。

不过,还有很多方法可以检查多个状态。

如果你希望多次检查时只有一个结果(即你会期望任何PersonalPolicy,FarmOwnersPolicy或SelectoMaticPolicy被返回),我可能会设置一个“PolicyType”变量并在其上执行一个switch-statement。例如:

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; 
} 

但是这种方法在你的情况下是可行的,你必须有你的独立的布尔变量解析为执行级或错误级别的一些等价的。

但是,也可以将多个条件链接到较大的单个语句。 最常见的例子是使用& &或||在每个陈述之间暗示“AND”或“OR”。应用尤其是反逻辑OR语句可以证明比较多的bool

时要强大

例子:

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”布尔,仅仅为了提高可读性在更多部分:) 另外,如果该顺序布尔逻辑的一部分会中断,那么当你还没有读回“这个代码在做什么”时,可能会少一些麻烦触及了那个代码。

编辑:

还有条件(三元)运算符。 当在以下实施例中使用:

TestCase ? Value1 : Value2; 

它导致以下逻辑:

If (TestCase){ 
    return Value1; 
} 
Else { 
    return Value2; 
} 

我用这个“所有的时间”设置缺省值,或返回某些变量以默认 - 值,当它不包含我期望的值。

+0

这是有帮助的,似乎是我在寻找谢谢。 –

+0

非常欢迎。 另外,关于获取“默认值”,我忘记提到一个非常方便的操作符。 “三元运营商”,我会编辑我的答案,在几分钟内包括这一个:) – Annihlator