【问题标题】:find xth td with td contains in same tr xpath python在相同的tr xpath python中找到带有td的xth td
【发布时间】:2013-08-06 08:28:14
【问题描述】:

我的页面有一个包含 11 列的表格,给定第 2 列的文本值,我想单击同一行的第 11 列(箭头按钮)。

我的 DOM 如下所示:

<table id=”atab”  width=”100%” class=”at-class”>`  
    <thead>…</thead>  
    <tbody>  
        <tr>...</tr>  
        <tr>  
            <td>…</td>  
            <td>  
                <a href=”/abc/def/ghi/prop?id=1”>grp1</a>  
            </td>  
            <td>…</td>  
            <td>…</td>  
            <td>200</td>  
            <td>…</td>  
            <td>…</td>  
            <td>…</td>  
            <td>…</td>  
            <td>…</td>  
            <td>  
                <ul class=”dropwd”  
                    <li class>  
                        <input class=”a-act a-menu-button” type=”button” value=”^”  
                        <ul class=”sub_menu” style=”vis””>…</ul>  
                    </li>  
                </ul>  
            </td>  
        <tr>  
    <tbody>  

这有效(因为我刚刚从检查元素中获取了 xpath)。不过我不能用。

myxpath = "//*[@id='atab']/tbody/tr[2]/td[11]/ul/li/input”
myxpath.click()

我需要使用 contains,然后抓住兄弟姐妹(第 11 位,从我有我的 contains 的第 9 位)。我为 myxpath 尝试了以下操作,但找不到该元素。我在其他地方使用了相同的格式,这很好。唯一的不同是这一次,我得到的不是相邻的兄弟姐妹,而是第 x 个兄弟姐妹。

在哪里campg = grp1

//table[@class='at-class']//td[contains(text(),' " + campg + " ')]/following-sibling::td[9]/ul/li/input
//* [@id='atab']//td[contains(text(),' " + campg + " ')]/following-sibling::td[9]/ul/li/input
//* [@id='campaigns']//td[contains(text(),' " + campg +  " ')]/following-sibling::td[9]/ul/li/input[@type=’button’]

我也尝试了其他组合。

【问题讨论】:

  • 我也会使用following-sibling。我想知道您的问题是否不是来自单引号和双引号...' " + campg + " '... 之间的空格。您还可以对按钮的值使用谓词吗? (以便不需要知道包含按钮的 td 的确切位置)。像这样的东西:"//table[@class='at-class']//td[contains(., '" + campg + "')]/following-sibling::td//ul/li/input[@type='button' and @value='^']"
  • 另外,使用 % 语法创建 XPath 表达式通常更易读:"//table[@class='at-class']//td[contains(., '%s')]/following-sibling::td//ul/li/input[@type='button' and @value='^']" % campg
  • 我完全按照您所说的进行了尝试,但仍然找不到该元素。空间不是问题(这是一个错字,我没有空格)。我也尝试了谓词,仍然没有运气。下面的第二个答案完美无缺。非常感谢您的调查。
  • 确实,@JensErat 的回答更加简洁。我仍然建议使用 td[11] 以外的其他内容选择最终输入(我总是对表达式中的位置常量保持警惕)。但是如果input[@type='button' and @value='^'] 不起作用,我没有建议没有原始文档来找出这个谓词有什么问题

标签: python xpath selenium webdriver selenium-webdriver


【解决方案1】:

此 XPath 表达式选择表,查找匹配行(其中第二列包含您要搜索的针),然后选择 在该行中具有相关输入元素的第 11 列.

不需要使用祖先和跟随的任何相对轴步骤,只有下降树通常更快、更易读且更不容易出错。

//table[@id='atab']//tr[contains(td[2], 'needle')]/td[11]/ul/li/input

【讨论】:

  • 非常感谢您!它比处理跟随兄弟更容易。
  • 如果这回答了您的问题,您应该将其标记为“已接受”(请参阅​​左侧的小复选标记和How to Ask)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-14
  • 2015-02-11
  • 1970-01-01
  • 2019-06-18
  • 2010-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多