簡體   English   中英

當前無法識別列表中的“已檢查/選定”單選按鈕

[英]Unable to Identify presently the Checked/Selected radio button in a list

我有一個網頁,其中包含一些問題以及可以單選按鈕形式選擇的問題。 如下所示:

在此處輸入圖片說明

我一次只能選擇一個單選按鈕。 但是,我可以隨時更改選擇。

我想在列表中標識當前的Checked / Selected單選按鈕。

以下是進行任何選擇之前的源頁面的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-untouched類名稱將更改為ng-touched 但是,當我將選擇從選項1更改為選項2或3或列表中的任何選項時,選項1中的類名仍然保持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> 

我無法以任何獨特的方式來識別當前選擇的單選按鈕。 任何人都可以在這里幫助我嗎?

您要查找的是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);
        } 
    }

如果您可以對所有單選按鈕使用通用屬性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
        }
}
<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>
    <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"){ 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"); } } 
 <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> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM