Html敏捷包无法使用xpath找到列表选项

本文关键字:列表 选项 xpath 包无法 Html | 更新日期: 2023-09-27 17:58:25

这与我之前的问题有关,但我似乎有另一个角落的案例,Html敏捷包无法按预期工作。

这是Html(精简到基本内容,删除敏感信息):

<html>
<select id="one-time-payment-form:vendor-select-supplier">
    <option value="1848">Frarma Express</option>
    <option value="2119">Maderas Garcia</option>
    <option value="1974">Miaris, S.A.</option>
    <option value="3063">Ricoh Panama</option>
    <option value="3840">UNO EXPRESS</option>
    <option value="68">Garrett Blaser Gretsch</option>
    <option value="102">Oriel Antonio Grau</option>
</select>
</html>

这是代码:

const string xpath = "//*[contains(@id, 'one-time-payment-form:vendor-select-')]/option[contains(text(), 'UNO EXPRESS')]";
var driver = new FirefoxDriver(new FirefoxProfile()) { Url = "PATH_TO_FILE_CONTAINING_HTML_SHOWN_ABOVE" };
Thread.Sleep(2000);
//Can WebDriver find it?
var e = driver.FindElementByXPath(xpath);
Console.WriteLine(e!=null ? "WebDriver success" : "WebDriver failure");
//Can Html Agility Pack find it?
var source = driver.PageSource;
var htmlDoc = new HtmlDocument { OptionFixNestedTags = true };
HtmlNode.ElementsFlags.Remove("form");
htmlDoc.LoadHtml(source);
var nodes = htmlDoc.DocumentNode.SelectNodes(xpath);
Console.WriteLine(nodes!=null ? "Html Agility Pack success" : "Html Agility Pack failure");
driver.Quit();

当我运行代码时,控制台显示:

WebDriver success
Html Agility Pack failure

很明显,WebDriver在XPath //*[contains(@id, 'one-time-payment-form:vendor-select-')]/option[contains(text(), 'UNO EXPRESS')]中定位项目没有问题,但Html敏捷包不能。

有什么想法吗?

Html敏捷包无法使用xpath找到列表选项

这是"设计的"。OPTION和FORM的想法是一样的。由于Html敏捷包的历史原因,一些标签的处理方式有所不同。在HTML 3.2时代,OPTION并不总是关闭的,在HTML 3.2中,它不是必需的。

尝试添加以下内容:

HtmlNode.ElementsFlags.Remove("option");