selenium - python - 获取包含元素的 table 行

selenium - python - fetch the table row containing element

我正在获取 table 中的元素:

<tbody id="actiontable-tbody">
<tr>
    <td class="letterbreak first">default</td>       <!-- first fetch this element -->
    <td class="letterbreak">Internal</td>
    <td class="action-btn-cell" id="id9c">
</tr>
<tr>
    <td class="letterbreak first odd">opcua-module</td>
    <td class="letterbreak odd">Internal</td>
    <td class="action-btn-cell" id="id9d">
    </td>
</tr>
</tbody>

我首先获取其中一行中的一个元素:

element = driver.find_element(By.XPATH,"//*[text()='default']")

现在我想获取包含该元素的行。我试过了:

row = element.parent

但这是返回一个 webDriver 对象。如何获取与该行中的元素相关的行?

编辑:最终目标是获取同一行中的“action-btn-cell”元素。所以我试图上升一个节点并获取行节点,然后获取“action-btn-cell”。一旦我获取了第一个元素,我可以获取它的兄弟姐妹吗?获取需要从第一个获取的元素开始,通过向上到行节点或获取兄弟节点,而不是循环遍历所有行(这是算法实现方式的限制)。

使用 and you can use either of the following :

提取并打印属于包含文本 default 的同一 <tr> 的文本
  • 使用 xpathtext 属性:

    print([my_elem.text for my_elem in driver.find_elements_by_xpath("//td[text()='default']/..")])
    
  • 使用 xpathparenttext 属性:

    print([my_elem.text for my_elem in driver.find_elements_by_xpath("//td[text()='default']//parent::tr[1]")])
    
  • 使用 xpathancestortext 属性:

    print([my_elem.text for my_elem in driver.find_elements_by_xpath("//td[text()='default']//ancestor::tr[1]")])
    

理想情况下你需要诱导 for visibility_of_all_elements_located() and you can use either of the following :

  • 使用 xpathtext 属性:

    print([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//td[text()='default']//parent::tr[1]")))])
    
  • 使用 xpathparenttext 属性:

    print([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//td[text()='default']//parent::tr[1]")))])
    
  • 使用 xpathancestortext 属性:

    print([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//td[text()='default']//ancestor::tr[1]")))])
    

要识别元素 <td class="action-btn-cell" id="id9c">,请使用以下任一 xpath

选项 1:使用 following-sibling

//*[text()='default']/following-sibling::td[@class='action-btn-cell']

//*[text()='default']/following-sibling::td[2]

选项 2:识别 parent 然后跟随 child.

//tr[.//*[text()='default']]/td[@class='action-btn-cell']

//tr[.//*[text()='default']]/td[2]

示例:

driver.find_element_by_xpath("//tr[.//*[text()='default']]/td[@class='action-btn-cell']")