2013-03-11 19 views
5

カスタムWebサイト用のSeleniumドライバを使用して単体テストを行うには数時間をかけています。問題は、私の最初のテストケースが常に保留中であることです。私は他に何も書かなかった。いくつかのチュートリアルを試しましたが、どれもうまくいきません。私がやったこと:Visual Studio 2010(win 7 x64)Selenium Unit Testが保留になる

  • NuGetコンソール(参照あり)でSelenium WebDriverをインストールします。
  • NuGetを介してSelenium WebDriver.Supportをインストールしてください(参考にしてください)。
  • 私はファイアウォールをオフにしました。

最後に、私はこのページのチュートリアルに従っていますdotnet-developer.de!このチュートリアルはうまくいきません。 vb.netで与えられるが、次のように私はC#で、それを翻訳しています

using System; 
using System.Text; 
using System.Collections.Generic; 
using System.Linq; 
using Microsoft.VisualStudio.TestTools.UnitTesting; 
using OpenQA.Selenium; 
using OpenQA.Selenium.Firefox; 
using OpenQA.Selenium.Support.UI; 

namespace FastMenuSeleniumTests 
{ 
    /// <summary> 
    /// Summary description for UnitTest1 
    /// </summary> 
    [TestClass] 
    public class UnitTest1 
    { 

     public IWebDriver driver; 
     const string BaseURL = "http://www.bing.com"; 

     public UnitTest1() 
     { 
      // do nothing 
     } 

     private TestContext testContextInstance; 

     /// <summary> 
     ///Gets or sets the test context which provides 
     ///information about and functionality for the current test run. 
     ///</summary> 
     public TestContext TestContext 
     { 
      get 
      { 
       return testContextInstance; 
      } 
      set 
      { 
       testContextInstance = value; 
      } 
     } 

     #region Additional test attributes 
     // 
     // You can use the following additional attributes as you write your tests: 
     // 
     // Use ClassInitialize to run code before running the first test in the class 
     // [ClassInitialize()] 
     // public static void MyClassInitialize(TestContext testContext) { } 
     // 
     // Use ClassCleanup to run code after all tests in a class have run 
     // [ClassCleanup()] 
     // public static void MyClassCleanup() { } 
     // 
     // Use TestInitialize to run code before running each test 
     [TestInitialize()] 
     public void TestInitialization() 
     { 
      driver = new FirefoxDriver(); 
      //System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en"); 
      //System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en"); 
     } 
     // 
     // Use TestCleanup to run code after each test has run 
     [TestCleanup()] 
     public void TestCleanup() 
     { 
      driver.Quit(); 
     } 
     // 
     #endregion 

     [TestMethod] 
     public void TestMethod1() 
     { 
      IWebElement SearchBox = default(IWebElement); 
      IWebElement FirstResult = default(IWebElement); 

      //Go to Bing Homepage 
      driver.Navigate().GoToUrl(BaseURL); 

      //Get Handle for Searchbox 
      SearchBox = GetWebElement(driver, By.Id("sb_form_q"), 10); 

      //Enter Search Text 
      SearchBox.SendKeys("dotnet-developer.de"); 

      //Different ways to start the search 
      //Method 1: Press ENTER 
      SearchBox.SendKeys(Keys.Enter); 

      //Method 2: Grab Search-Button and click it 
      //Dim SearchButton As IWebElement 
      //SearchButton = GetWebElement(driver, By.Id("sb_form_go"), 10) 
      //SearchButton.Click() 

      //Now get the first result returned by Bing search 
      FirstResult = GetWebElement(driver, By.XPath("//ul[@class='sb_results']/li/div/div/div/h3/a"), 10); 

      //Method 1: Compare the subject 
      string ExpectedText = "dotnet-developer.de | Tips for vb.net,…"; 
      Assert.AreEqual(ExpectedText, FirstResult.Text, "Subject is not correct"); 

      //Method 2: Compare the link 
      string ExpectedURL = "http://www.dotnet-developer.de/"; 
      Assert.AreEqual(ExpectedURL, FirstResult.GetAttribute("href"), "URL is not correct!"); 
     } 

     /// <summary> 
     /// Retrieve Web Element using default driver and default timeout 
     /// </summary> 
     /// <param name="definition">Definition of the WebElement to grab</param> 
     /// <returns></returns> 
     /// <remarks></remarks> 
     private IWebElement GetWebElement(OpenQA.Selenium.By definition) 
     { 
      const int DefaultTimeout = 10; 
      return GetWebElement(definition, DefaultTimeout); 
     } 

     /// <summary> 
     /// Retrieve Web Element using default driver 
     /// </summary> 
     /// <param name="definition">Definition of the WebElement to grab</param> 
     /// <param name="timeoutSeconds">Seconds to wait until a timeout is thrown</param> 
     /// <returns></returns> 
     /// <remarks></remarks> 
     private IWebElement GetWebElement(OpenQA.Selenium.By definition, int timeoutSeconds) 
     { 
      return GetWebElement(driver, definition, timeoutSeconds); 
     } 

     /// <summary> 
     /// Waits until the given element is enabled and visible 
     /// </summary> 
     /// <param name="webDriver"></param> 
     /// <param name="definition"></param> 
     /// <param name="seconds"></param> 
     /// <returns></returns> 
     /// <remarks>Needs to wait for .displayed because for e.g. in a collapsed Treeview all nodes are available but not visible 
     /// if the parent node is collapsed and therefore the following error would appear: 
     /// OpenQA.Selenium.ElementNotVisibleException: Element is not currently visible and so may not be interacted with 
     /// </remarks> 
     private IWebElement GetWebElement(IWebDriver webDriver, OpenQA.Selenium.By definition, int seconds) 
     { 
      WebDriverWait wait = new WebDriverWait(webDriver, TimeSpan.FromSeconds(seconds)); 

      wait.Until(d => { return d.FindElement(definition).Enabled & d.FindElement(definition).Displayed; }); 

      return webDriver.FindElement(definition); 
     } 

    } 
} 

答えて

2

私は問題を自分で確認しています。まず、私のマシン上のソフトウェアについてより具体的にする必要があります。私は自分のPCにVisual Studio 2010とVisual Studio 2012の両方をインストールしました。私はVisual Studio 2010でテストをしようとしていましたが、保留中でした。私がVS 2012でテストを開いたとき、すべて正常に動作し、問題はありませんでした。それは両方のVSが(私が気づいていない)何かを台無しに見えると私はそれ以降のバージョンを使用する必要があります。

+1

あなたは間違っていると思っていました。私が[このブログに]出てくるまでは、互換性の問題ではないものが本当の原因であったはずです。(http://blogs.msdn.com/b/aseemb/archive/2012/09/ 08/not-able-to-run-unit-tests-visual-studio-2010-and-visual-studio-2012-installed-side-by-side.aspx)が正しいことを証明します。 – Arman

+0

私はVS2017と同じ問題を抱えています。私はこのマシンにVS2015を持っていますが、それをめったに使用していません。なぜ私はまだ同じ問題を抱えているのですか? –

+1

@DanCsharpster現在の理由を教えてもらえません。出力ウィンドウに表示されているものを提供できるかどうかは分かりません。しかし、ReSharperはそれらを実行することができます。たとえば、Visual StudioにnUnit拡張機能をインストールすることなく、ReShaperでnUnitテストを実行できます。私は現在VS2015とVS2017の両方を持っており、両方のバージョンで自分のマシンでテストが実行されています。また、.netまたはnetcoreであるかどうかによって、MSTestまたはdotnetを使用してコンソールで実行することもできます。最悪のシナリオでは、なぜ実行できないのかというメッセージを出力します。 – Nikola

関連する問題