カスタム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);
}
}
}
あなたは間違っていると思っていました。私が[このブログに]出てくるまでは、互換性の問題ではないものが本当の原因であったはずです。(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
私はVS2017と同じ問題を抱えています。私はこのマシンにVS2015を持っていますが、それをめったに使用していません。なぜ私はまだ同じ問題を抱えているのですか? –
@DanCsharpster現在の理由を教えてもらえません。出力ウィンドウに表示されているものを提供できるかどうかは分かりません。しかし、ReSharperはそれらを実行することができます。たとえば、Visual StudioにnUnit拡張機能をインストールすることなく、ReShaperでnUnitテストを実行できます。私は現在VS2015とVS2017の両方を持っており、両方のバージョンで自分のマシンでテストが実行されています。また、.netまたはnetcoreであるかどうかによって、MSTestまたはdotnetを使用してコンソールで実行することもできます。最悪のシナリオでは、なぜ実行できないのかというメッセージを出力します。 – Nikola