为Selenium测试创建循环并解析XML节点值

本文关键字:XML 节点 Selenium 测试 创建 循环 | 更新日期: 2023-09-27 18:17:28

我正在尝试用c#编写一个测试函数,从XML文件中读取数据并解析为Selenium测试方法,XML代码如下:

<home>
   <ask_frame>
       <button>
      <id>Object ID<id>
      <xpath>Object XPath<xpath>
       <textbox>
      <id>Object ID<id>
      <xpath>Object XPath<xpath>
   </ask_frame>
   <search_frame>
      <id>Object ID<id>
      <xpath>Object XPath<xpath>
   </search_frame>
<home>

我试图创建一个从这些节点读取id和xpath值的循环,并将它们解析为通过id和xpath搜索网页元素的方法。我最初的尝试是:

代码更新

         public void CheckIdTest()
    {
        driver.Navigate().GoToUrl(baseURL + "FlightSearch");
        XmlDocument xd = new XmlDocument();
        xd.Load(@"C:'XMLFile1.xml");
        XmlNodeList mainlist = xd.SelectNodes("//home/*");
        XmlNode mainroot = mainlist[0];
        foreach (XmlNode xnode in mainroot)
        {
            string objID = xnode.SelectSingleNode("id").InnerText;
            string objXPath = xnode.SelectSingleNode("XPath").InnerText;
            objID = objID.Trim();
            objXPath = objXPath.Trim();
            String checkValue = "ObjID value is: " + objID + Environment.NewLine+ "ObjXPath value is: " + objXPath;
            System.IO.File.WriteAllText(@"C:'checkvalue.txt", checkValue);
            objectCheck(objXPath, objID);
        }   
    }

我已经放置了一个String并检查了ObjID和ObjXPath的正确值是否已经实现,但是这个循环也只进行了两次(检查了第一个分支中的2个节点)。如何让它遍历XML中的每个节点?

对代码的任何建议和解释都将非常感谢。

为Selenium测试创建循环并解析XML节点值

这两行基本上使用了不正确的XPath:

XmlNodeList idlist = xd.SelectNodes("id");
XmlNodeList xpathlist = xd.SelectNodes("XPath");

<id><xpath>节点并不直接位于根级别,因此您不能像上面那样访问它。此外,xpath是区分大小写的,所以您应该使用"xpath"而不是"xpath"。试着像这样修复它:

XmlNodeList idlist = xd.SelectNodes("//id");
XmlNodeList xpathlist = xd.SelectNodes("//xpath");

或更详细:

XmlNodeList idlist = xd.SelectNodes("home/*/id");
XmlNodeList xpathlist = xd.SelectNodes("home/*/xpath");

更新:

回应你关于循环问题的评论,我认为你应该这样改变它:

foreach (XmlNode xnode in mainroot.ChildNodes)
{
    string objID = xnode.SelectSingleNode("id").InnerText;
    string objXPath = pathroot.SelectSingleNode("xpath").InnerText;
    objectCheck(objID, objXPath);
}   

你得到这个错误,因为你试图使用一个空的对象,即未实例化。

行插入断点
XmlDocument xd = new XmlDocument();

并逐行执行,直到找到没有内容的地方。空引用是。用不了多久就能找出问题所在。