#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 в качестве аргумента.