2014-09-17 6 views
1

Мы получили некоторые плохо написанные радио кнопки на унаследованной странице следующим образом:Использование селена WebDriver выбрать радиокнопку из текста

<input id="button1" name="button" value="32" onchange="assignProduct(this.value);" type="radio"></input> 
RADIO TEXT 1 
<input id="button2" name="button" value="33" onchange="assignProduct(this.value);" type="radio"></input> 
RADIO TEXT 2 

для информации, это будет выглядеть так же, как бы:

<input id="button" name="button" value="32" onchange="assignProduct(this.value);" type="radio">RADIO TEXT 1</input> 
<input id="button" name="button" value="33" onchange="assignProduct(this.value);" type="radio">RADIO TEXT 2</input> 

последний код является более правильным и позволяет выбирать кнопки ввода текста с помощью «Radio Text 2» по:

driver.findElement(By.xpath("(//input[contains(@text, 'RADIO TEXT 2')])")).click(); 

Какой код я могу использовать, чтобы найти переключатель в первом примере кода, с чем я действительно должен иметь дело?

Текст больше не содержится внутри элемента, поэтому .xpath() не соответствует ему.

Мне нужно найти текст, затем щелкнуть мышью сразу же? Могу ли я это сделать без использования и перемещения всей страницы?

ответ

1

использования XPath axes. В данном конкретном случае following-sibling. Я разработал локатор, чтобы продемонстрировать его на этой странице. Посмотрите на ответ @ bansalshah. Позволяет выбрать <p>, где следующий текст содержит for eg. Он работает, Ive проверил это :)

.//*[@id='answer-25883774']//div[@class='post-text']/p[./following-sibling::*[contains(., 'for eg')]]

Таким образом, в вашем случае, чтобы выбрать вход для RADIO TEXT 2 это должно быть что-то вроде

.//input[@type='radio'][./following-sibling::*[contains(., 'RADIO TEXT 2')]]

+0

+1, именно то, что я хотел/попросил, спасибо. – CharlieS

0

Из кода, который я могу увидеть можно сопоставить значения с текстом

например, для значения = 32 для радио текста 1 и получить значение из XPath

если значение = 32, то выберите кнопка радио

Надеются, что это помогает

+0

это не отвечает на вопрос , Я не знаю значение, которое хочу найти, я знаю только текст. я мог бы также выбрать по id, если бы знал это. – CharlieS

1

Для первого примера, вы можете получить доступ к кнопки, там ID:

driver.findElement(By.id("button1")).click(); //first button 

и

driver.findElement(By.id("button2")).click(); //second button 

Если Id не достаточно, вы можете, используя xpath, доступ к ним через id и value:

driver.findElement(By.xpath("//input[@id='button1'][@value='32']")).click(); //first button 

и

driver.findElement(By.xpath("//input[@id='button2'][@value='33']")).click(); //first button 
+0

@CharlieS спрашивает, может ли он создать локатор XPath в соответствии со следующим текстом, а не с идентификатором или чем-то еще –

+0

как @AlexanderPetrovich комментирует, я не обязательно знаю id/значение. Во многих машинах генерации html они могут измениться с каждой сборкой, но текст, который будет видеть конечный пользователь, вряд ли изменится так часто. – CharlieS

+0

Извините, ребята, у меня вопрос неправильный –

Смежные вопросы