@findBy аннотации для переключателей

#java #selenium #selenium-webdriver

#java #селен #selenium-webdriver

Вопрос:

Я должен выбрать одно из нескольких значений типа с помощью переключателя @FindBy . Вот мой HTML-код, который мне нужно автоматизировать.

Я пытался указать @FindBy(how=How.CSS,using= "[type='radio']" and value) , но мне нужно передавать значение динамически. ie. Выберите BlueSkies или Pangea airlines.Каков наилучший способ ее написания. @FindBy Вернет список WebElements и могу ли я работать с ним таким образом. Пожалуйста, помогите.

    <input type="radio" name="outFlight" value="Blue Skies Airlines$361$271$7:10"/>
</td>
<td class="data_left" align="LEFT" bgcolor="CCCCCC">
<font size="-1" face="ARIAL">
<b>Blue Skies Airlines 361</b>
</font>
</td>
<td class="data_center_mono" align="CENTER" valign="TOP" bgcolor="CCCCCC">
<font size="-1" face="ARIAL">7:10</font>
<br/>
</td>
<td class="data_center" align="CENTER" bgcolor="CCCCCC" nowrap="">
<font size="-1" face="ARIAL">non-stop</font>
</td>
</tr>
<tr>
<td class="data_verb_xcols" valign="top" bgcolor="#FFFFFF" colspan="4">
</tr>
<tr>
<td class="frame_action_xrows" rowspan="2" align="CENTER" bgcolor="#FFCC00" valign="CENTER">
<input type="radio" name="outFlight" value="Pangea Airlines$362$274$9:17"/>
</td>
<td class="data_left" align="LEFT" bgcolor="CCCCCC">
<font size="-1" face="ARIAL">
<b>Pangaea Airlines 362</b>
</font>
</td>
  

Ответ №1:

Значение в @FindBy не может быть динамическим. Вы можете разделить его на два

 @FindBy(how = How.CSS, using = "[value*='Blue Skies Airlines']")
private WebElement blueSkyesRadioButton;

@FindBy(how = How.CSS, using = "[value*='Pangea Airlines']")
private WebElement pangeaAirlinesRadioButton;
  

Или вставить их как в список, так и для работы с индексами

 @FindBy(how = How.CSS, using = "[type='radio']")
private List<WebElement> radioButtons;
  

Комментарии:

1. да, @rajsat, вы можете определить пользовательский метод для возврата веб-элемента, указав значение из приведенного выше списка радиокнопок.

Ответ №2:

 @FindBy(how = How.CSS, using = "[type='radio']")
private List<WebElement> radioButtons;
  

Еще одно объяснение, подтверждающее решение, предоставленное @Guy, вы можете написать метод для динамического выбора радио. Для примера

 public void selectRadio(String airlineName){
  for(WebElement radio : radioButtons){
    if(radio.getAttribute("value").contains(airlineName)
        radio.click();
  }
}
  

При желании вы можете использовать итератор. Вам просто нужно вызвать этот метод с помощью объекта page, передающего airlineName в качестве аргумента.