是否可以编写一个可以为特定元素提供XPath的代码?

时间:2016-09-30 11:07:41

标签: java html css3 selenium selenium-webdriver

我担心的是,是否可以通过选择元素动态生成XPath,这样我就不必担心任何网站会定期在HTML文件中发生更新。 如果我不必每次都手动生成XPath,请随意留下任何可以解决此问题的方法。

1 个答案:

答案 0 :(得分:0)

是的,我为这个问题编写了代码。

我的情况是:我需要检查位于页面某处的元素,但XPath会不时更改。由于所有元素都在一个表中,我唯一需要知道的是第一个元素的XPath,然后检查每一行以查看是否存在其他元素。

我用过

        public void UserGetsXPathOfElement(string element){
        string PageSource = Driver.PageSource;
        var doc = new HtmlAgilityPack.HtmlDocument();
        doc.LoadHtml(PageSource);

        var decs = doc.DocumentNode.Descendants().ToList();
        var targetEl = decs.FirstOrDefault(c => c.InnerText.Trim() == element && c.Name == "td");
        var newXpath = targetEl.XPath;

        var regex = new Regex(@"tr\[\d+\]");
        newXpath = regex.Replace(newXpath, @"tr[{0}]");

        ScenarioContext.Current["xpath"] = newXpath;
    }

只有在这段代码中,我在ScenarioContext中发送一个变量XPath var,并且我还修剪了我的xpath直到td。你可以不用这个。