【发布时间】:2017-02-08 22:45:13
【问题描述】:
我关心的是是否可以仅通过选择一个元素来动态生成 XPath,这样我就不必担心任何网站的 HTML 文件中定期发生的更新。 随意留下任何可以替代此问题的想法,因为我不必每次都手动生成 XPath。
【问题讨论】:
标签: java html css selenium selenium-webdriver
我关心的是是否可以仅通过选择一个元素来动态生成 XPath,这样我就不必担心任何网站的 HTML 文件中定期发生的更新。 随意留下任何可以替代此问题的想法,因为我不必每次都手动生成 XPath。
【问题讨论】:
标签: java html css selenium selenium-webdriver
是的,我正是针对这个问题编写了代码。
我的情况是:我需要检查页面某处的元素,但 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。你当然可以不考虑这个。
【讨论】: