如何使用 XPath 和 Selenium Webdriver 提取 XML 数据

2024-05-05

我正在使用 Selenium Webdriver(ver 2.31.2.0)(.Net),我正在尝试提取从“driver.PageSource”返回的元素(XML)。

我的问题:如何使用下面的 xpath 获取项目列表。 我可以使用 XPATH 插件在 FF 中运行,但相同的代码在 Selenium Webdriver 中不起作用

有什么帮助吗?

这是我在 Selenium Webdriver 中的代码:

var driver = new FirefoxDriver();
driver.Navigate().GoToUrl("http://website_name/languages.xml");
string _page_source = driver.PageSource;
ReadOnlyCollection<IWebElement> webElements = _page_source.FindElementsByXPath("//response//results//items/vList");

我的 xml 看起来像这样:

<response xmlns="http://schemas.datacontract.org/2004/07/myproj.cnn.com">
xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
    <meta>

    </meta>
    <results i:type="vList">
        <name>Language</name>
        <queryValue>language</queryValue>
        <displayOrder>0</displayOrder>
        <items>
            <vList>
                <name>English</name>
                <displayName>English</displayName>
                <displayOrder>0</displayOrder>
                <items />
            </vList>
            <vList>
                <name>Swedish</name>
                <displayName>Swedish</displayName>
                <displayOrder>1</displayOrder>
                <items />
            </vList>
        </items>
    </results>
</response>

您可以使用 selenium 浏览并获取 xml,但可以使用 .net 类来处理 xml。

The driver.PageSourceproperty 是一个字符串,您应该直接使用.Net 类来解析所表示的 xml。另外,也没有方法FindElementsByXPath()在字符串对象上,除非这是您编写的扩展方法。

使用以下命令读取 xmldriver.PageSource来自硒

var driver = new FirefoxDriver();
driver.Navigate().GoToUrl("http://website_name/languages.xml");
XmlReader reader = XmlReader.Create(driver.PageSource);

或者,通过直接浏览到 url 来读取 xml

XmlReader reader = XmlReader.Create("http://website_name/languages.xml");

然后使用下面的代码来解析和读取xml。 需要注意的关键点是如何将名称空间信息提供给 xpath。

//load xml document
XElement xmlDocumentRoot = XElement.Load(reader);
//also add the namespace infn, chose a prefix for the default namespace
XmlNameTable nameTable = reader.NameTable;
XmlNamespaceManager namespaceManager = new XmlNamespaceManager(nameTable);
namespaceManager.AddNamespace("a", "http://schemas.datacontract.org/2004/07/myproj.cnn.com");

//now query with your xml - remeber to prefix the default namespace
var items = xmlDocumentRoot.XPathSelectElements("//a:results/a:items/a:vList", namespaceManager);

Console.WriteLine("vlist has {0} items.", items.Count());

foreach (var item in items)
{
Console.WriteLine("Display name: {0}", item.XPathSelectElement("a:displayName",namespaceManager).Value);
}
// OR get a list of all display names using linq
var displayNames = items.Select(x => x.XPathSelectElement("a:displayName", namespaceManager).Value).ToList();

您将需要以下命名空间才能使上述内容正常工作:

using System;
using System.Linq;
using System.Xml;
using System.Xml.Linq;
using System.Xml.XPath;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 XPath 和 Selenium Webdriver 提取 XML 数据 的相关文章

随机推荐

  • Gem .gemspec 中的本地依赖关系

    我正在开发一个 gem Gem A 它使用了我也编写的另一个 gem Gem B 到目前为止 Gem B 已添加到 Gem A 的 gemspec 中 gem add dependency gem a gt 0 0 4 但我现在发现需要使用
  • 在闪亮的应用程序中选择文件夹或文件夹目录

    我在使用闪亮时遇到问题 我想选择保存我要在应用程序中使用的所有文件的文件夹 方法是 1 将工作目录设置为该文件夹路径 或 2 将此文件夹内的所有 csv 数据上传到我的应用程序以进行进一步处理 1 我找到了shinyFiles包 但它非常非
  • 在 (PHP/GD) 中调整图像大小

    我正在寻找帮助 建议 以找到最有效的方法来使用以下方法将图像大小调整为尽可能小PHP GD同时保留原始图像的纵横比 但确保调整后的图像大于定义的最小宽度和高度 例如 调整大小后的图像必须具有宽度 gt 400 且高度 gt 300但应尽可能
  • FirebaseIndexRecyclerAdapter onDataChanged 被调用但 getItemCount() 始终返回 0

    我在用着FirebaseIndexRecyclerAdapter https github com firebase FirebaseUI Android blob master database src main java com fir
  • lambda 始终返回“1”

    有这样的代码 include
  • 如何根据 URL 路径添加 CSS 类?

    如何根据我所在的路径将 CSS 类添加到 div 中 包括如果我在其中包含 则不应该出现问题 div class popup ul li a href vs Example 1 a li li a href bod Example 2 a
  • xcodebuild 失败,返回代码:65 - 使用 CLI/Appcenter 但没有错误消息

    我已将 React Native 应用程序升级到 0 59 现在当我尝试使用 AppCenter 或 CLI 存档我的应 用程序时 我收到错误代码 65 但没有任何消息解释问题 当我直接从 Xcode 构建时 Xcode版本 10 2 1
  • C++ 最大非负整数

    以下内容是否会在所有平台 int 大小等上按预期工作 或者有更容易接受的方法吗 我做了以下的事情 define MAX NON NEGATIVE INT int unsigned int 1 2 我不会通过解释它在做什么来侮辱你的智商 编辑
  • 嵌套过滤器:$filter 数组,然后是 $filter 子数组

    本质上 我试图过滤掉已被 废弃 的子文档和子子文档 这是我的架构的精简版本 permitSchema id name feeClassifications new Schema id trashed name fees new Schema
  • 动态元素 ID 到 setId(int) - Android

    我看到了语法定义setId int and findViewByID int 但我们如何使用findViewById R id row1 我尝试使用这个 Object1 setId Integer parseInt repeat 它没有显示
  • 深层链接给出空路径

    我在实施 DeepLinks 时遇到问题 我可以从 myapp myapp com route 等 URL 打开该应用程序 但它不处理它的路径 它只是打开程序 我用以下命令打开它 this deeplinks route route Rou
  • 更改单击后退按钮上的 BottomNavigationView 图标

    在我的布局的底部有一个底部导航视图与三个片段 如果我单击后退按钮 片段将切换 但底部图标不会切换 我该如何修复它 addToBackStack 有效 也许您有一些关于美化代码的建议 在活动或片段中添加片段标签是一个好的做法吗 public
  • Web 服务 SOAP 请求适用于 SOAPUI,但不适用于 PHP

    我已经尝试了几乎所有我能找到的可能的解决方案 但我似乎无法让这个脚本工作 以下是我之前的一些尝试 如何使用 wse php 库通过 SOAP 连接到安全的 Web 服务 https stackoverflow com questions 1
  • Jquery - 自动计算输入字段

    我正在尝试使下面的代码正常工作 我非常感谢您的帮助 基本上它是计算三个输入字段的总和 然后与其他两个字段相乘 最终结果应显示在输入字段 pcamount 中 这是 jsFiddle 中的示例 http jsfiddle net D98PW
  • 将信号/槽(QObject)添加到 QGraphicsItem:性能受到影响?

    我想将信号 槽添加到 QGraphicsItem 以便我可以从另一个线程访问 QGraphicsItemObjects 我知道有两个选项 使用 QGraphicsObject 或从 QObject 和 QGraphicsItem 继承 使用
  • Microsoft Visual C++ 2008 和 R2007b 的 Mex 类型

    我想对 vs2008 和 matlab2007b 使用 mex 类型 我尝试了下面的代码 include
  • __libc_start_main 发生了什么?

    我真的很想理解从高级代码到可执行文件的步骤 但是遇到了一些困难 我写了一个空的int main C 文件并尝试通过以下方式破译反汇编objdump d 这是发生的事情 in start 设置对齐方式 将参数压入堆栈 调用 libc star
  • 带 LiveData 的嵌套观察者(观察观察者)

    我有一个案例 我有 BottomNavigationView 其中片段被显示 隐藏而不是添加 替换 因此它们不会每次都经历生命周期 片段1正在观察一个数据库表 片段2正在观察一个不同的 我的目标是调用 onChanged片段2当 on 改变
  • C++ 中的可变参数函数声明中省略了逗号

    我习惯于这样声明可变参数函数 int f int n 读书时C 编程语言我发现书中的声明省略了逗号 int f int n the comma has been omitted 这个语法似乎是 C 特定的 因为当我尝试使用 C 编译器编译它
  • 如何使用 XPath 和 Selenium Webdriver 提取 XML 数据

    我正在使用 Selenium Webdriver ver 2 31 2 0 Net 我正在尝试提取从 driver PageSource 返回的元素 XML 我的问题 如何使用下面的 xpath 获取项目列表 我可以使用 XPATH 插件在