如何通过selenium知道父节点下的节点位置?

时间:2016-02-05 17:09:29

标签: c# html selenium xpath

我正在试图弄清楚如何知道哪个是当前节点在其父节点下的位置,目前我正在使用selenium并且大多数时候我使用Xpath。这是因为我想提取表的所有列 在此示例中,列数是动态生成的

<tabe>
    <tr>
        <td>23</td>
        <td>42</td>
        <td>31</td>
    </tr>
    <tr>
        <td>13</td>
        <td>21</td>
        <td>32</td>
    </tr>
</table>

所以我要说我需要第二个colunm(42和21),但由于内容是动态生成的,我不知道它是否是第二个列我只知道我想要第42个列的colum。所以使用硒,我很容易得到42。我需要它的位置td。

我在一个可能复杂而缓慢的算法中思考过。基本上是这样的:

  1. 获取当前
  2. 下的html代码
  3. 获取当前节点的父级
  4. 迭代(计算时)得到父母,并将每个孩子的内部代码与我找到的代码进行比较。
  5. 我需要考虑的其他一些验证
  6. 当我发现那是柱子时
  7. 该算法存在一些问题,例如“如果有2个具有相同内码的元素会怎么样”,而且正如我所提到的那样可能很慢,当我开始考虑Row和colum span时,我不会让我开始(目前我只是需要当前行中的位置。)

    所以有一种更简单的方法吗?一些我不知道的硒功能,或者通过XPath获得它的方法?

    谢谢:)

1 个答案:

答案 0 :(得分:1)

使用XPath玩一下我想出了以下查询;

import UIKit

class ShowSubmitViewController: UIViewController, UIWebViewDelegate {

@IBOutlet weak var webView: UIWebView!
var URL : String = ""
var type : Int = 0

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    loadBrowser()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func loadBrowser(){

    switch type {
    case 5:
        let htmlString:String! = URL
        webView.loadHTMLString(htmlString, baseURL: nil)
    default:
        let url = NSURL (string: URL);
        let requestObj = NSURLRequest(URL: url!);
        webView.loadRequest(requestObj);
    }


 }

}

这将为您提供相对定位的&#34; TD&#34;第二个&#34; TR&#34;来自&#34; TD&#34;中的一系列文字。第1&#34; TR&#34;。

这是基于Find position of a node using xpath