2016-06-13 20 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