【问题标题】:selenium - python - fetch the table row containing elementselenium - python - 获取包含元素的表行
【发布时间】:2020-12-15 22:28:43
【问题描述】:

我正在获取表格中的元素:

<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”。获取第一个元素后,我可以获取它的兄弟姐妹吗?提取需要从第一个提取的元素开始,通过向上到行节点或提取兄弟节点,而不是通过循环遍历所有行(这是算法实现方式的限制)。

【问题讨论】:

  • 您对术语 ...包含该元素的行... 有什么期望?
  • 同一中的所有元素
  • @DebanjanB 或者我应该说包含这些元素的元素。表格行是可提取的元素吗?

标签: python-3.x selenium selenium-webdriver xpath webdriverwait


【解决方案1】:

要识别元素 &lt;td class="action-btn-cell" id="id9c"&gt;,请使用以下任何 xpath

选项 1:使用跟随兄弟

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

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

选项 2:识别父母,然后跟随孩子。

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

【讨论】:

    【解决方案2】:

    要使用 Selenium 提取和打印属于同一 &lt;tr&gt; 的文本,其中包含文本 default,您可以使用以下任一 Locator Strategies

    • 使用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]")])
      

    理想情况下,您需要为visibility_of_all_elements_located() 诱导WebDriverWait,您可以使用以下任一Locator Strategies

    • 使用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]")))])
      

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签