Подтвердить что ты не робот

Как найти родительские элементы python webdriver?

Есть ли какие-либо методы для python + selenium для поиска родительских элементов, элементов брата или дочерних элементов, как

driver.find_element_parent? или
driver.find_element_next? или
driver.find_element_previous?

например:

<tr>
  <td> 
     <select>
        <option value=0, selected='selected'> </option> 
        <option value=1, > </option>
        <option value=2,> </option>
     </select>
   </td>
   <td> 'abcd'
     <input name='A'> </input>
    <td>
<tr>

Я пробовал, как показано ниже, но сбой:

input_el=driver.find_element_by_name('A')
td_p_input=find_element_by_xpath('ancestor::input')

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

4b9b3361

Ответ 1

Вы можете найти родительский элемент, используя .. xpath:

input_el = driver.find_element_by_name('A')
td_p_input = input_el.find_element_by_xpath('..')

Как сделать отдельный xpath для выбора выбранного параметра, например:

selected_option = driver.find_element_by_xpath('//option[@selected="selected"]')

Ответ 2

В вашем примере я считаю, что вы хотите только выбранную опцию в строке таблицы, если и только если эта строка также имеет элемент ввода с именем "A", независимо от того, где в html-дереве этот элемент находится ниже строка-элемент.

Вы можете достичь этого с помощью оси предков xpath.

Для лучшей читаемости я покажу, как это сделать шаг за шагом (но вы можете фактически разместить все только в одном xpath-выражении):

// first find your "A" named element
namedInput = driver.find_element_by_name("A");

// from there find all ancestors (parents, grandparents,...) that are a table row 'tr'
rowElement = namedInput.find_element_by_xpath(".//ancestor::tr");

// from there find the first "selected" tagged option
selectedOption = rowElement.find_element_by_xpath(".//option[@selected='selected']");

Ответ 3

Selenium WebElement Object имеет встроенный метод: self.parent

Например:

origin_element = driver. find_element_by_class_name("some_class_name")
parent_element = origin_element.parent
brother_elements = parent_element.find_elements_by_css_selector("*")