Что может быть селектором xpath/Css для HTML-тега ниже, Как выбрать конкретный переключатель с помощью Selenium xpath

  1. Что может быть селектором xpath/Css для HTML-тега ниже. Мой вопрос: как щелкнуть переключатель Bike.
  2. давайте предположим, что ниже есть динамический переключатель, у нас есть 100 номеров переключателей, и здесь мы не можем предсказать номер индекса нашего переключателя.

HTML:

<table> 
    <tbody>
        <tr><td class = "textAlignCenter" id = "clientDocTypeSelection"><input class = "marginL10" name = "clientRadio" type = "radio"></td><td id = "clientDocTypeDescription"> Bike </td></tr>
        <tr><td class = "textAlignCenter" id = "clientDocTypeSelection"><input class = "marginL10" name = "clientRadio" type = "radio"></td><td id = "clientDocTypeDescription"> Car </td></tr>
    </tbody> 
</table>
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Если вы являетесь веб-разработчиком или тестировщиком, вы можете быть знакомы с Selenium, популярным инструментом для автоматизации работы...
0
0
168
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Найдите td с искомым текстом следующим образом:

tds = driver.find_elements_by_xpath("//td[@class='textAlignCenter']")
for td in tds:
   if td.text == 'Bike':
      radio_input = td.find_element_by_xpath(".//input[@type='radio']")

искать решение в java

Soumya Ranjan Das 24.12.2020 15:13

Я не думаю, что вам потребуется много усилий, чтобы перевести код на Java.

marco 24.12.2020 15:32
Ответ принят как подходящий

Чтобы click() на радио-кнопке с текстом как Велосипед, вы можете использовать одну из следующих стратегий xpath на основе локатора:

  • Использование Java и normalize-space():

    driver.findElement(By.xpath("//td[@id='clientDocTypeDescription' and normalize-space()='Bike']//preceding::td[1]/input")).click();
    
  • Использование Java и contains():

    driver.findElement(By.xpath("//td[contains(., 'Bike')]//preceding::td[1]/input")).click();
    

В идеале для click() на элементе вам нужно вызвать WebDriverWait для elementToBeClickable(), и вы можете использовать одну из следующих стратегий локатора:

  • Использование Java и normalize-space():

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//td[@id='clientDocTypeDescription' and normalize-space()='Bike']//preceding::td[1]/input"))).click();
    
  • Использование Java и contains():

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//td[contains(., 'Bike')]//preceding::td[1]/input"))).click();
    

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

Soumya Ranjan Das 24.12.2020 15:12

@SoumyaRanjanDas Требуемый <input> всегда будет иметь индекс 1. Даже удаление индекса должно работать без проблем.

undetected Selenium 24.12.2020 15:19

Большое вам спасибо, вы действительно помогли ... ценю вас ... большое спасибо, все работает отлично

Soumya Ranjan Das 24.12.2020 16:07

Другие вопросы по теме