为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中的每个节点?
对代码的任何建议和解释都将非常感谢。
这两行基本上使用了不正确的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();
并逐行执行,直到找到没有内容的地方。空引用是。用不了多久就能找出问题所在。