wake-up-neo.com

Wie finde ich über Python Webdriver übergeordnete Elemente?

Gibt es Methoden für Python + Selen, um übergeordnete Elemente, Bruderelemente oder untergeordnete Elemente zu finden

driver.find_element_parent? oder
driver.find_element_next? oder
driver.find_element_previous?

z.B:

<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>

Ich habe es wie unten versucht, aber scheitern:

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

Wie kann ich ich bekomme das übergeordnete Element des Eingabeelements und dann schließlich die Option auswählen ?

40
Stella

Sie können ein übergeordnetes Element mit .. xpath finden:

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

Wie wäre es, einen separaten xpath für die Auswahl einer Option zu erstellen, wie zum Beispiel:

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

Aus Ihrer Beispiel-Abbildung möchte ich, dass die ausgewählte Option nur dann in einer Tabellenzeile angezeigt wird, wenn diese Zeile auch ein Eingabeelement mit dem Namen "A" enthält, unabhängig davon, wo sich dieses Element im HTML-Baum unterhalb des Zeilenelements befindet .

Sie können dies über die xpath-Vorfahrachse erreichen.

Um die Lesbarkeit zu verbessern, zeige ich Ihnen Schritt für Schritt, wie Sie dies tun können (aber Sie können tatsächlich alles in nur einen xpath-Ausdruck einfügen):

// 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']");
5
drkthng

Eine Möglichkeit, zu Elementen unter derselben Hierarchie zu navigieren, besteht in der Verwendung von /../ in xpath wie folgt:

current_element = driver.find_element_by_xpath('//Android.view.ViewGroup/Android.widget.RelativeLayout/Android.widget.TextView[@text="Current element text"]/../Android.widget.TextView[@text="Next element text"]')

Hier wird es:

  1. Navigieren Sie zuerst zu Android.widget.TextView[@text = "Current element text"].
  2. Dann geht es zurück zum übergeordneten Element, dh Android.widget.RelativeLayout, und wählt den nächsten Android.widget.TextView[@text="Next element text"] unter derselben Hierarchie aus.
0
Parth Naik