2017-01-16 26 views
0

我有一個網頁,其中包含一些問題和選項,以單選按鈕的形式選擇問題。 如下圖所示:目前無法識別列表中的選中/選中單選按鈕

enter image description here

我只能一次選擇一個單選按鈕。 但是我可以在任何時候改變我的選擇。

我想確定一個列表中目前選中的單選按鈕。

下面是源網頁的HTML代碼進行任何選擇

<div class="ec-question-radios ng-scope"> 
 
<!-- ngRepeat: option in settings.get('options') --> 
 
<div class="ec-question-radios__radio ng-scope" data-ng-click="setValue(option.id)" data-ng-repeat="option in settings.get('options')" role="button" tabindex="0"> 
 
<label class="ec-question-radios__label"> 
 
<input id="ec-portfolio-planner-default-questionnaire-question21" class="ec-question-radios__input ng-pristine **ng-untouched** ng-valid ng-empty" type="radio" value="1" data-ng-model="$parent.ngModel" name="ec-portfolio-planner-default-questionnaire-question21" aria-invalid="false"/> 
 
<span class="ec-question-radios__text ng-binding">       It wouldn't have an impact on my standard of living and I wouldn't need to use any additional resources (for example, savings) as a result.      </span> 
 
</label> 
 
</div> 
 
<!-- end ngRepeat: option in settings.get('options') --> 
 
<div class="ec-question-radios__radio ng-scope" data-ng-click="setValue(option.id)" data-ng-repeat="option in settings.get('options')" role="button" tabindex="0"> 
 
<label class="ec-question-radios__label"> 
 
<input id="ec-portfolio-planner-default-questionnaire-question22" class="ec-question-radios__input ng-pristine **ng-untouched** ng-valid ng-empty" type="radio" value="2" data-ng-model="$parent.ngModel" name="ec-portfolio-planner-default-questionnaire-question22" aria-invalid="false"/> 
 
<span class="ec-question-radios__text ng-binding">       I have other resources I could fall back on.      </span> 
 
</label> 
 
</div>

我找到了一個解決方案太那個做任何選擇後前,NG-不變類名輸入標籤更改爲ng-touched。 但是,當我將選擇從選項1更改爲選項2或3或列表中的任何選項時,選項一中的類名仍然爲ng-touched。並假設我將我的選擇從選項1更改爲2,輸入標記的類名更改爲ng-touched

如以下html代碼段所示。

<div class="ec-question-radios__radio ng-scope" data-ng-click="setValue(option.id)" data-ng-repeat="option in settings.get('options')" role="button" tabindex="0"> 
 
<label class="ec-question-radios__label"> 
 
<input id="ec-portfolio-planner-default-questionnaire-question21" class="ec-question-radios__input ng-pristine ng-valid ng-not-empty ng-touched" type="radio" value="1" data-ng-model="$parent.ngModel" name="ec-portfolio-planner-default-questionnaire-question21" aria-invalid="false"/> 
 
<span class="ec-question-radios__text ng-binding">       It wouldn't have an impact on my standard of living and I wouldn't need to use any additional resources (for example, savings) as a result.      </span> 
 
</label> 
 
</div> 
 
<!-- end ngRepeat: option in settings.get('options') --> 
 
<div class="ec-question-radios__radio ng-scope" data-ng-click="setValue(option.id)" data-ng-repeat="option in settings.get('options')" role="button" tabindex="0"> 
 
<label class="ec-question-radios__label"> 
 
<input id="ec-portfolio-planner-default-questionnaire-question22" class="ec-question-radios__input ng-pristine ng-valid ng-not-empty ng-touched" type="radio" value="2" data-ng-model="$parent.ngModel" name="ec-portfolio-planner-default-questionnaire-question22" aria-invalid="false"/> 
 
<span class="ec-question-radios__text ng-binding">       I have other resources I could fall back on.      </span> 
 
</label> 
 
</div> 
 
<!-- end ngRepeat: option in settings.get('options') --> 
 
<div class="ec-question-radios__radio ng-scope" data-ng-click="setValue(option.id)" data-ng-repeat="option in settings.get('options')" role="button" tabindex="0"> 
 
<label class="ec-question-radios__label"> 
 
<input id="ec-portfolio-planner-default-questionnaire-question23" class="ec-question-radios__input ng-pristine ng-untouched ng-valid ng-not-empty" type="radio" value="3" data-ng-model="$parent.ngModel" name="ec-portfolio-planner-default-questionnaire-question23" aria-invalid="false"/> 
 
<span class="ec-question-radios__text ng-binding">       It would have an impact on my immediate standard of living.      </span> 
 
</label> 
 
</div>

我沒有得到任何唯一途徑,使我能夠識別當前選擇的單選按鈕。 任何人都可以請求幫助我嗎?

+0

使用JavaScript找到解決方案。謝謝你的答案。 –

回答

1

您正在尋找的是isSelected,如果當前選中/檢查輸入(複選框/單選按鈕),則返回True

我不知道,這個代碼是完全正確的,因爲我不是Java編碼器,但它可能看起來像:

for(int i=0; i<=3; i++) 
    { 
    if (driver.findElements(By.xpath("//input[starts-with(@id, 'ec-portfolio-planner-default-questionnaire-question')]")).get(i).isSelected()) 
     { 
     WebElement selected_element = driver.findElements(By.xpath("//input[starts-with(@id, 'ec-portfolio-planner-default-questionnaire-question')]")).get(i); 
     } 
    } 
+0

感謝您的回答,我已經嘗試過使用isSelected(),但是它不會在任何時候返回true。即使在遍歷問題可用答案列表的同時選中了選項/單選按鈕之一。 –

0

更好,如果你可以使用常見的屬性ID或類所有無線電按鈕。那麼首先讓所有的單選按鈕的列表,然後它可以檢查哪一個選擇或取消選擇
讓我們假設你所有的單選按鈕,有着共同的ID =問題

List<WebElement> allRadiobtn = driver.findElements(By.id("question")); 
int iSize = allRadiobtn.size(); 
boolean bValue = false; 
for(int i=0; i < iSize ; i++){ 
    bValue = allRadiobtn.get(i).isSelected(); 
    if(bValue == true){ 
      // do some action 
     } 
} 
+0

感謝您的回答,我已經嘗試過使用isSelected(),但是它不會隨時返回true。即使在遍歷問題可用答案列表的同時選中了選項/單選按鈕之一。 –

+0

@PriyaP你可以檢查你是否可以通過allRadiobtn.get(i).click()或者xpath嘗試點擊選項。如果仍然無法找到該選項,則必須嘗試其他方法 –

+0

當我想交叉驗證時,它允許我單擊/選擇單選按鈕,但沒有辦法從列表中返回所選的單選按鈕。 我想要做的是.. 我選擇一個選項,移動到其他頁面,回到上一頁,我選擇了單選按鈕選項並驗證我選擇的那個,仍然選中或不選。 –

0
<script> 
    function add_class(value_check){ 
    if(value_check == "1"){ 
    var d = document.getElementById("ec-portfolio-planner-default-questionnaire-question21"); 
    d.classList.add("ng-untouched"); 
    document.getElementById("ec-portfolio-planner-default-questionnaire-question22").classList.remove("ng-untouched"); 
    document.getElementById("ec-portfolio-planner-default-questionnaire-question23").classList.remove("ng-untouched"); 
    } 
    else if(value_check == "2"){ 
    var d1 = document.getElementById("ec-portfolio-planner-default-questionnaire-question22"); 
    d1.classList.add("ng-untouched"); 
    document.getElementById("ec-portfolio-planner-default-questionnaire-question21").classList.remove("ng-untouched"); 
    document.getElementById("ec-portfolio-planner-default-questionnaire-question23").classList.remove("ng-untouched"); 
    } 
    else if(value_check == "3"){ 
    var d2 = document.getElementById("ec-portfolio-planner-default-questionnaire-question23"); 
    d2.classList.add("ng-untouched"); 
    document.getElementById("ec-portfolio-planner-default-questionnaire-question21").classList.remove("ng-untouched"); 
    document.getElementById("ec-portfolio-planner-default-questionnaire-question22").classList.remove("ng-untouched"); 
    } 
    } 
</script> 
<div class="ec-question-radios__radio ng-scope" data-ng-click="setValue(option.id)" data-ng-repeat="option in settings.get('options')" role="button" tabindex="0"> 
<label class="ec-question-radios__label"> 
<input id="ec-portfolio-planner-default-questionnaire-question21" class="ec-question-radios__input ng-pristine ng-valid ng-not-empty ng-touched" type="radio" value="1" data-ng-model="$parent.ngModel" name="ec-portfolio-planner-default-questionnaire-question" aria-invalid="false" onclick="add_class('1');"/> 
<span class="ec-question-radios__text ng-binding">       It wouldn't have an impact on my standard of living and I wouldn't need to use any additional resources (for example, savings) as a result.      </span> 
</label> 
</div> 
<!-- end ngRepeat: option in settings.get('options') --> 
<div class="ec-question-radios__radio ng-scope" data-ng-click="setValue(option.id)" data-ng-repeat="option in settings.get('options')" role="button" tabindex="0"> 
<label class="ec-question-radios__label"> 
<input id="ec-portfolio-planner-default-questionnaire-question22" class="ec-question-radios__input ng-pristine ng-valid ng-not-empty ng-touched" type="radio" value="2" data-ng-model="$parent.ngModel" name="ec-portfolio-planner-default-questionnaire-question" aria-invalid="false" onclick="add_class('2');"/> 
<span class="ec-question-radios__text ng-binding">       I have other resources I could fall back on.      </span> 
</label> 
</div> 
<!-- end ngRepeat: option in settings.get('options') --> 
<div class="ec-question-radios__radio ng-scope" data-ng-click="setValue(option.id)" data-ng-repeat="option in settings.get('options')" role="button" tabindex="0"> 
<label class="ec-question-radios__label"> 
<input id="ec-portfolio-planner-default-questionnaire-question23" class="ec-question-radios__input ng-pristine ng-untouched ng-valid ng-not-empty" type="radio" value="3" data-ng-model="$parent.ngModel" name="ec-portfolio-planner-default-questionnaire-question" aria-invalid="false" onclick="add_class('3');"/> 
<span class="ec-question-radios__text ng-binding">       It would have an impact on my immediate standard of living.      </span> 
</label> 
</div> 
0
<script> 
     function add_class(value_check){ 
     if(value_check == "1"){ 
     var d = document.getElementById("ec-portfolio-planner-default-questionnaire-question21"); 
     d.classList.add("ng-untouched"); 
     document.getElementById("ec-portfolio-planner-default-questionnaire-question22").classList.remove("ng-untouched"); 
     document.getElementById("ec-portfolio-planner-default-questionnaire-question23").classList.remove("ng-untouched"); 
     } 
     else if(value_check == "2"){ 
     var d1 = document.getElementById("ec-portfolio-planner-default-questionnaire-question22"); 
     d1.classList.add("ng-untouched"); 
     document.getElementById("ec-portfolio-planner-default-questionnaire-question21").classList.remove("ng-untouched"); 
     document.getElementById("ec-portfolio-planner-default-questionnaire-question23").classList.remove("ng-untouched"); 
     } 
     else if(value_check == "3"){ 
     var d2 = document.getElementById("ec-portfolio-planner-default-questionnaire-question23"); 
     d2.classList.add("ng-untouched"); 
     document.getElementById("ec-portfolio-planner-default-questionnaire-question21").classList.remove("ng-untouched"); 
     document.getElementById("ec-portfolio-planner-default-questionnaire-question22").classList.remove("ng-untouched"); 
     } 
     } 
    </script> 

function add_class(value_check){ 
 
    if(value_check == "1"){ 
 
\t var d = document.getElementById("ec-portfolio-planner-default-questionnaire-question21"); 
 
\t d.classList.add("ng-untouched"); 
 
\t document.getElementById("ec-portfolio-planner-default-questionnaire-question22").classList.remove("ng-untouched"); 
 
\t document.getElementById("ec-portfolio-planner-default-questionnaire-question23").classList.remove("ng-untouched"); 
 
\t } 
 
\t else if(value_check == "2"){ 
 
\t var d1 = document.getElementById("ec-portfolio-planner-default-questionnaire-question22"); 
 
\t d1.classList.add("ng-untouched"); 
 
\t document.getElementById("ec-portfolio-planner-default-questionnaire-question21").classList.remove("ng-untouched"); 
 
\t document.getElementById("ec-portfolio-planner-default-questionnaire-question23").classList.remove("ng-untouched"); 
 
\t } 
 
\t else if(value_check == "3"){ 
 
\t var d2 = document.getElementById("ec-portfolio-planner-default-questionnaire-question23"); 
 
\t d2.classList.add("ng-untouched"); 
 
\t document.getElementById("ec-portfolio-planner-default-questionnaire-question21").classList.remove("ng-untouched"); 
 
\t document.getElementById("ec-portfolio-planner-default-questionnaire-question22").classList.remove("ng-untouched"); 
 
\t } 
 
    }
<div class="ec-question-radios__radio ng-scope" data-ng-click="setValue(option.id)" data-ng-repeat="option in settings.get('options')" role="button" tabindex="0"> 
 
    <label class="ec-question-radios__label"> 
 
    <input id="ec-portfolio-planner-default-questionnaire-question21" class="ec-question-radios__input ng-pristine ng-valid ng-not-empty ng-touched" type="radio" value="1" data-ng-model="$parent.ngModel" name="ec-portfolio-planner-default-questionnaire-question" aria-invalid="false" onclick="add_class('1');"/> 
 
    <span class="ec-question-radios__text ng-binding">       It wouldn't have an impact on my standard of living and I wouldn't need to use any additional resources (for example, savings) as a result.      </span> 
 
    </label> 
 
    </div> 
 
    <!-- end ngRepeat: option in settings.get('options') --> 
 
    <div class="ec-question-radios__radio ng-scope" data-ng-click="setValue(option.id)" data-ng-repeat="option in settings.get('options')" role="button" tabindex="0"> 
 
    <label class="ec-question-radios__label"> 
 
    <input id="ec-portfolio-planner-default-questionnaire-question22" class="ec-question-radios__input ng-pristine ng-valid ng-not-empty ng-touched" type="radio" value="2" data-ng-model="$parent.ngModel" name="ec-portfolio-planner-default-questionnaire-question" aria-invalid="false" onclick="add_class('2');"/> 
 
    <span class="ec-question-radios__text ng-binding">       I have other resources I could fall back on.      </span> 
 
    </label> 
 
    </div> 
 
    <!-- end ngRepeat: option in settings.get('options') --> 
 
    <div class="ec-question-radios__radio ng-scope" data-ng-click="setValue(option.id)" data-ng-repeat="option in settings.get('options')" role="button" tabindex="0"> 
 
    <label class="ec-question-radios__label"> 
 
    <input id="ec-portfolio-planner-default-questionnaire-question23" class="ec-question-radios__input ng-pristine ng-untouched ng-valid ng-not-empty" type="radio" value="3" data-ng-model="$parent.ngModel" name="ec-portfolio-planner-default-questionnaire-question" aria-invalid="false" onclick="add_class('3');"/> 
 
    <span class="ec-question-radios__text ng-binding">       It would have an impact on my immediate standard of living.      </span> 
 
    </label> 
 
    </div>

相關問題