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