XML 解析和自动化
XML parsing and automation
除了我为工作编写的自动化之外,我从来没有真正需要使用 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>
很简单。我需要做的是从每个节点中提取用户名和密码,并将它们放入两个单独的变量中。之后,我有一些自动代码可以找到 3 个元素(用户名、密码、提交按钮),并相应地与它们交互以登录。然后我进行冒烟测试以检查图像并关闭浏览器。该代码在这里:
chromeDriver.FindElement(By.Id(@"userNameInput")).SendKeys(userName.ToString());
chromeDriver.FindElement(By.Id(@"passwordInput")).SendKeys(passWord.ToString());
chromeDriver.FindElement(By.Id(@"submitButton")).Click();
Thread.Sleep(10);
bool isVisible = chromeDriver.FindElement(By.Id(@"logoImage")).Displayed;
如您所知,我需要使用的变量是 userName
和 passWord
。我尝试过的代码(在其他尝试中)无济于事:
XDocument rootElement = XDocument.Load(@"C:\Test Data.xml");
IEnumerable<string> textSegment =
from segment in rootElement.Descendants("Username")
select (string)segment;
var userName = textSegment;
我得到的输出是这样的:
System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Xml.Linq.XElement,System.String]
这是 written/sent 到用户名字段的文字输出,此时我完全不知道自己做错了什么。我知道在解析 XML
.
时我做错了什么
试试这个
var result = rootElement.Descendants("Login").Select(lg =>
new {
user = lg.Element("Username").Value,
password = lg.Element("Password").Value
});
您试图将 XElement 类型的对象转换为字符串,您应该取而代之。
所以,在 CPR43 和 Stinky Towel(谢谢你们)的帮助下,我想出了这个解决方案我的问题:
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
的其他人。
除了我为工作编写的自动化之外,我从来没有真正需要使用 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>
很简单。我需要做的是从每个节点中提取用户名和密码,并将它们放入两个单独的变量中。之后,我有一些自动代码可以找到 3 个元素(用户名、密码、提交按钮),并相应地与它们交互以登录。然后我进行冒烟测试以检查图像并关闭浏览器。该代码在这里:
chromeDriver.FindElement(By.Id(@"userNameInput")).SendKeys(userName.ToString());
chromeDriver.FindElement(By.Id(@"passwordInput")).SendKeys(passWord.ToString());
chromeDriver.FindElement(By.Id(@"submitButton")).Click();
Thread.Sleep(10);
bool isVisible = chromeDriver.FindElement(By.Id(@"logoImage")).Displayed;
如您所知,我需要使用的变量是 userName
和 passWord
。我尝试过的代码(在其他尝试中)无济于事:
XDocument rootElement = XDocument.Load(@"C:\Test Data.xml");
IEnumerable<string> textSegment =
from segment in rootElement.Descendants("Username")
select (string)segment;
var userName = textSegment;
我得到的输出是这样的:
System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Xml.Linq.XElement,System.String]
这是 written/sent 到用户名字段的文字输出,此时我完全不知道自己做错了什么。我知道在解析 XML
.
试试这个
var result = rootElement.Descendants("Login").Select(lg =>
new {
user = lg.Element("Username").Value,
password = lg.Element("Password").Value
});
您试图将 XElement 类型的对象转换为字符串,您应该取而代之。
所以,在 CPR43 和 Stinky Towel(谢谢你们)的帮助下,我想出了这个解决方案我的问题:
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
的其他人。