セレン 。
C#クライアントドライバーとIDEをダウンロードしました。なんとかテストを記録し、IDEから正常に実行しました。しかし、今はC#を使用してそれを実行したいと思います。関連するすべてのDLL(Firefox)をプロジェクトに追加しましたが、Selenium
クラスがありません。こんにちは世界はニースでしょう。
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium;
class GoogleSuggest
{
static void Main(string[] args)
{
IWebDriver driver = new FirefoxDriver();
//Notice navigation is slightly different than the Java version
//This is because 'get' is a keyword in C#
driver.Navigate().GoToUrl("http://www.google.com/");
IWebElement query = driver.FindElement(By.Name("q"));
query.SendKeys("Cheese");
System.Console.WriteLine("Page title is: " + driver.Title);
driver.Quit();
}
}
Selenium.Support
これでコードを書く準備ができました:)
IEを含むコードの場合、IEドライバをダウンロードします
リンク: http://Selenium-release.storage.googleapis.com/index.html
最新リリースの2.45を開くIEDriverServer_x64_2.45.0.ZipまたはIEDriverServer_Win32_2.45.0.Zipをダウンロード
C:\などの任意の場所にある.exeファイルを抽出して貼り付けます
今後の使用のためにパスを覚えておいてください。
MYサンプルコード:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OpenQA.Selenium;
using OpenQA.Selenium.Support.UI;
using OpenQA.Selenium.IE;
namespace Selenium_HelloWorld
{
class Program
{
static void Main(string[] args)
{
IWebDriver driver = new InternetExplorerDriver("C:\\");
driver.Navigate().GoToUrl("http://108.178.174.137");
driver.Manage().Window.Maximize();
driver.FindElement(By.Id("inputName")).SendKeys("apatra");
driver.FindElement(By.Id("inputPassword")).SendKeys("asd");
driver.FindElement(By.Name("DoLogin")).Click();
string output = driver.FindElement( By.XPath(".//*[@id='tab-general']/div/div[2]/div[1]/div[2]/div/strong")).Text;
if (output != null )
{
Console.WriteLine("Test Passed :) ");
}
else
{
Console.WriteLine("Test Failed");
}
}
}
}
C#と組み合わせてSeleniumのIDEを設定するには、Visual Studio Expressを使用します。また、テストフレームワークとしてnUnitを使用できます。以下のリンクで詳細を確認できます。最初のリンクで説明されている内容を設定したようです。基本的なスクリプトを作成する方法の詳細については、2番目のリンクを確認してください
自動化されたテスト用にVSExpressでC#、nUnit、Seleniumクライアントドライバーをセットアップする方法
NunitとC#を使用したBasic Selenium Webドライバーテストケースの作成
上記のブログのサンプルコード
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
//Step a
using OpenQA.Selenium;
using OpenQA.Selenium.Support;
using OpenQA.Selenium.Firefox;
using NUnit.Framework;
namespace NUnitSelenium
{
[TestFixture]
public class UnitTest1
{
[SetUp]
public void SetupTest()
{
}
[Test]
public void Test_OpeningHomePage()
{
// Step b - Initiating webdriver
IWebDriver driver = new FirefoxDriver();
//Step c : Making driver to navigate
driver.Navigate().GoToUrl("http://docs.seleniumhq.org/");
//Step d
IWebElement myLink = driver.FindElement(By.LinkText("Download"));
myLink.Click();
//Step e
driver.Quit();
)
}
}
これは古い質問であることは知っていますが、この情報を他の人に公開したいと思いました。
私が見つけるのに苦労したことの1つは、C#でPageFactoryを使用する方法でした。特に複数のIWebElementの場合。 PageFactoryを使用する場合の例をいくつか示します。 ソース:PageFactory.cs
HTML WebElementを宣言するには、クラスファイル内でこれを使用します。
private const string _ID ="CommonIdinHTML";
[FindsBy(How = How.Id, Using = _ID)]
private IList<IWebElement> _MultipleResultsByID;
private const string _ID2 ="IdOfElement";
[FindsBy(How = How.Id, Using = _ID2)]
private IWebElement _ResultById;
コンストラクタ内でページオブジェクト要素をインスタンス化することを忘れないでください。
public MyClass(){
PageFactory.InitElements(driver, this);
}
これで、任意のファイルまたはメソッドでその要素にアクセスできます。また、必要に応じて、これらの要素から相対パスを取得することもできます。私はページファクトリーを好みます:
これを使用して、独自の要素待機メソッドを作成します。WebElementsラッパーは、テストスクリプトに公開する必要があるものだけにアクセスし、クリーンな状態を維持するのに役立ちます。
これにより、データのリストなどの動的な(自動生成された)Web要素がある場合、作業が非常に簡単になります。 IWebElementsを受け取るラッパーを作成し、メソッドを追加して、探している要素を見つけるだけです。
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Interactions;
using OpenQA.Selenium.Support.UI;
using SeleniumAutomationFramework.CommonMethods;
using System.Text;
[TestClass]
public class SampleInCSharp
{
public static IWebDriver driver = Browser.CreateWebDriver(BrowserType.chrome);
[TestMethod]
public void SampleMethodCSharp()
{
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
driver.Url = "http://www.store.demoqa.com";
driver.Manage().Window.Maximize();
driver.FindElement(By.XPath(".//*[@id='account']/a")).Click();
driver.FindElement(By.Id("log")).SendKeys("kalyan");
driver.FindElement(By.Id("pwd")).SendKeys("kalyan");
driver.FindElement(By.Id("login")).Click();
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
IWebElement myDynamicElement = wait.Until<IWebElement>(d => d.FindElement(By.LinkText("Log out")));
Actions builder = new Actions(driver);
builder.MoveToElement(driver.FindElement(By.XPath(".//*[@id='menu-item-33']/a"))).Build().Perform();
driver.FindElement(By.XPath(".//*[@id='menu-item-37']/a")).Click();
driver.FindElement(By.ClassName("wpsc_buy_button")).Click();
driver.FindElement(By.XPath(".//*[@id='fancy_notification_content']/a[1]")).Click();
driver.FindElement(By.Name("quantity")).Clear();
driver.FindElement(By.Name("quantity")).SendKeys("10");
driver.FindElement(By.XPath("//*[@id='checkout_page_container']/div[1]/a/span")).Click();
driver.FindElement(By.ClassName("account_icon")).Click();
driver.FindElement(By.LinkText("Log out")).Click();
driver.Close();
}
}
C#
コードファイルには、次のようなコードが含まれています。
using System;
using System.IO;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
//add this name space to access WebDriverWait
using OpenQA.Selenium.Support.UI;
namespace MyTest
{
[TestClass]
public class MyTest
{
public static IWebDriver Driver = null;
// Use TestInitialize to run code before running each test
[TestInitialize()]
public void MyTestInitialize()
{
try
{
string path = Path.GetFullPath(""); //Copy the chrome driver to the debug folder in the bin or set path accordingly
Driver = new ChromeDriver(path);
}
catch (Exception ex)
{ string error = ex.Message; }
}
// Use TestCleanup to run code after each test has run
[TestCleanup()]
public void MyCleanup()
{
Driver.Quit();
}
[TestMethod]
public void MyTestMethod()
{
try
{
string url = "http://www.google.com";
Driver.Navigate().GoToUrl(url);
IWait<IWebDriver> wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(30.00)); // Waiter in Selenium
wait.Until(ExpectedConditions.PresenceOfAllElementsLocatedBy(By.XPath(@"//*[@id='lst - ib']")));
var txtBox = Driver.FindElement(By.XPath(@"//*[@id='lst - ib']"));
txtBox.SendKeys("Google Office");
var btnSearch = Driver.FindElement(By.XPath("//*[@id='tsf']/div[2]/div[3]/center/input[1]"));
btnSearch.Click();
System.Threading.Thread.Sleep(5000);
}
catch (Exception ex)
{
string error = ex.Message;
}
}
}
}
それで全部です ...
FirefoxDriverService service = FirefoxDriverService.CreateDefaultService(@"D:\DownloadeSampleCode\WordpressAutomation\WordpressAutomation\Selenium", "geckodriver.exe");
service.Port = 64444;
service.FirefoxBinaryPath = @"C:\Program Files (x86)\Mozilla Firefox\firefox.exe";
Instance = new FirefoxDriver(service);
必要なC#ライブラリをすべて参照のプロジェクトに追加したら、以下のコードを使用します。
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
namespace SeleniumWithCsharp
{
class Test
{
public IWebDriver driver;
public void openGoogle()
{
// creating Browser Instance
driver = new FirefoxDriver();
//Maximizing the Browser
driver.Manage().Window.Maximize();
// Opening the URL
driver.Navigate().GoToUrl("http://google.com");
driver.FindElement(By.Id("lst-ib")).SendKeys("Hello World");
driver.FindElement(By.Name("btnG")).Click();
}
static void Main()
{
Test test = new Test();
test.openGoogle();
}
}
}