C# XML解析和自动化

C# XML解析和自动化,c#,xml,selenium,linq-to-xml,C#,Xml,Selenium,Linq To Xml,除了为工作而编写的自动化之外,我从未真正需要使用XML。也许我做错了,也许我只是…幸运 尽管如此,我在解析XML文件时遇到了一些问题。XML的结构如下所示: // I have removed the username and passwords as they are sensitive <?xml version="1.0" encoding="UTF-8"?> <Logins> <Login> <Username>xxx&l

除了为工作而编写的自动化之外,我从未真正需要使用
XML
。也许我做错了,也许我只是…幸运

尽管如此,我在解析
XML
文件时遇到了一些问题。
XML
的结构如下所示:

// I have removed the username and passwords as they are sensitive
<?xml version="1.0" encoding="UTF-8"?>
<Logins>
   <Login>
      <Username>xxx</Username>
      <Password>xxx</Password>
   </Login>
...
</Logins>
您可以确定,我需要使用的变量是,
userName
passWord
。我尝试过的代码(包括其他尝试)无效,如下所示:

XDocument rootElement=XDocument.Load(@“C:\Test Data.xml”);
IEnumerable文本段=
来自rootElement.substands中的段(“用户名”)
选择(字符串)段;
var userName=textSegment;
我得到的结果是:

System.Linq.Enumerable+whereselectEnumerableInterator`2[System.Xml.Linq.XElement,System.String]

这是正在写入/发送到用户名字段的文本输出,我完全不知道此时我做错了什么。我知道在解析
XML

时我做错了什么,试试这个

var result = rootElement.Descendants("Login").Select(lg =>
                   new {
                         user = lg.Element("Username").Value,
                         password = lg.Element("Password").Value
                        });
您试图将XElement类型的对象转换为string,应改为获取其值。

尝试此操作

var result = rootElement.Descendants("Login").Select(lg =>
                   new {
                         user = lg.Element("Username").Value,
                         password = lg.Element("Password").Value
                        });

您试图将XElement类型的对象转换为string,您应该改为获取其值。

因此,在CPR43臭毛巾的帮助下(谢谢两位),我找到了解决问题的方法:

using System.Xml.Linq;
using System.Threading;
using System.Linq;
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;

namespace MCESA_SmokeTest
{
   public class SmokeTest
   {
      IWebDriver chromeDriver = new ChromeDriver(@"C:\Users\xxxxx\Selenium Stuff\Drivers");

      [Test]
      public void NavigateToHomePageInProduction()
      {
         chromeDriver.Navigate().GoToUrl(@"https://xxx.xxx.xxx/XXXX");
         chromeDriver.Manage().Window.Maximize();

         XDocument rootElement = XDocument.Load(@"C:\Test Data.xml");

         var result = rootElement.Descendants("Login").Select(lg =>
              new
              {
                 user = lg.Element("Username").Value,
                 password = lg.Element("Password").Value
              });

         foreach (var temp in result)
         {
            chromeDriver.FindElement(By.Id(@"userNameInput")).SendKeys(temp.user);
            chromeDriver.FindElement(By.Id(@"passwordInput")).SendKeys(temp.password);
            chromeDriver.FindElement(By.Id(@"submitButton")).Click();
            Thread.Sleep(10);
            bool isVisible = chromeDriver.FindElement(By.Id(@"logoImage")).Displayed;
            isVisible = chromeDriver.FindElement(By.ClassName(@"Header_mcesa")).Displayed;
            chromeDriver.FindElement(By.Id(@"logout")).Click();
         }
         chromeDriver.Quit();
      }  
   }
}

希望这能帮助像我一样对
LinQ to XML
不熟悉的任何人。

因此,在CPR43臭毛巾的帮助下,我能够找到解决我问题的方法:

using System.Xml.Linq;
using System.Threading;
using System.Linq;
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;

namespace MCESA_SmokeTest
{
   public class SmokeTest
   {
      IWebDriver chromeDriver = new ChromeDriver(@"C:\Users\xxxxx\Selenium Stuff\Drivers");

      [Test]
      public void NavigateToHomePageInProduction()
      {
         chromeDriver.Navigate().GoToUrl(@"https://xxx.xxx.xxx/XXXX");
         chromeDriver.Manage().Window.Maximize();

         XDocument rootElement = XDocument.Load(@"C:\Test Data.xml");

         var result = rootElement.Descendants("Login").Select(lg =>
              new
              {
                 user = lg.Element("Username").Value,
                 password = lg.Element("Password").Value
              });

         foreach (var temp in result)
         {
            chromeDriver.FindElement(By.Id(@"userNameInput")).SendKeys(temp.user);
            chromeDriver.FindElement(By.Id(@"passwordInput")).SendKeys(temp.password);
            chromeDriver.FindElement(By.Id(@"submitButton")).Click();
            Thread.Sleep(10);
            bool isVisible = chromeDriver.FindElement(By.Id(@"logoImage")).Displayed;
            isVisible = chromeDriver.FindElement(By.ClassName(@"Header_mcesa")).Displayed;
            chromeDriver.FindElement(By.Id(@"logout")).Click();
         }
         chromeDriver.Quit();
      }  
   }
}

希望这能帮助像我一样对
LinQ to XML
不熟悉的人。

var userName=textsecgment.ToList()能得到你需要的吗?var userName=textsecgment.ToList()能得到你需要的吗?这让我的思路正确。我会张贴我的完整答案代码,一旦我完成它。非常感谢,@CPR43!这让我的想法走上了正确的道路。我会张贴我的完整答案代码,一旦我完成它。非常感谢,@CPR43!