2017-03-17 18 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> 

十分に単純です。私がする必要があるのは、各ノードからユーザー名とパスワードを取り出し、2つの別々の変数に入れることです。その後、私は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。 (他の試みの中で)無駄に私が試してみましたコードは、ここにある:

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 [システム.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 
         }); 

を試してみてください。

+0

これは正しい道で私の考えを得ました。完成したら完全な回答コードを投稿します。ありがとう、@ CPR43! – Brian

1

ので、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に新しいです。