我关心的是是否可以通过选择一个元素来动态生成 XPath,这样我就不必担心任何网站的 HTML 文件定期发生的更新。 请随意留下任何可以作为此问题替代方案的想法,这样我就不必每次都手动生成 XPath。
最佳答案
是的,我正是针对这个问题编写了代码。
我的情况是:我需要检查位于页面上某处的元素,但 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。当然,你可以不考虑这个。
关于java - 是否可以编写一段代码来为我提供特定元素的 XPath?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39790099/