2017-03-17 1 views
0

작업을 위해 작성한 자동화 이외에 실제로 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; 

, 내가 사용하는 데 필요한 변수는, userNamepassWord. 코드 내가 (다른 시도 중), 아무 소용이, 시도는 여기에 있습니다 :

System.Linq.Enumerable + WhereSelectEnumerableIterator`2 [시스템 :

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

IEnumerable<string> textSegment = 
    from segment in rootElement.Descendants("Username") 
    select (string)segment; 

var userName = textSegment; 

내가 얻고 출력은 이것이다 .Xml.Linq.XElement, System.String]

이는 사용자 이름 필드에 쓰거나 보내지는 리터럴 출력이며,이 시점에서 내가 잘못하고있는 부분을 완전히 잃어 버렸습니다. . XML을 구문 분석 할 때 나는 잘못된 것을하고 있음을 압니다.

+1

** var userName = textSegment.ToList() ** 필요한 것을 얻으시겠습니까? –

답변

1

당신은 문자열로 XElement 형식의 개체를 변환하려고이

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

, 당신은 대신에 그 값을해야보십시오.

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(); 
     } 
    } 
} 

는 희망이 다른 사람을 도울 수 있습니다 :

+0

이것은 올바른 생각에서 내 생각을했습니다. 완료하면 전체 답변 코드를 게시합니다. 너무 고마워, @ CPR43! – Brian

1

그래서, CPR43냄새 나는 수건의 도움으로 (여러분 모두 감사합니다), 내 문제에이 솔루션을 마련 할 수 있었다 나는 새 것처럼 LinQ-to-XML입니다.