チェーンに「WaitFor」メソッドがあるように、C# Selenium webdriver アクション チェーンを拡張したいと考えています。
Selenium Webdriver のソースをチェックアウトして調べたところ、次のコード ブロックにたどり着きました。
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.PhantomJS;
using OpenQA.Selenium.Support.UI;
using System;
namespace My.Selenium.Extensions
{
public class Actions : OpenQA.Selenium.Interactions.Actions
{
public Actions(IWebDriver driver) : base(driver) { }
// NOTE: this line is the GOAL state
// I would like to be able to call to the WebDriver OR to pass in
// an IWebElement along with an anonymous code evaluation
// by using the selenium DefaultWait<T> class this should allow
// dynamic chaining of events while including waits for more complex
// action execution
// public Actions WaitFor<T>(T element, Func<T, TResult> condition)
// NOTE2: this is the only version that will both compile and can be
// successfully called via the "test" below
public Actions WaitFor<T>(T element, Func<T, T> condition)
{
DefaultWait<T> wait = new DefaultWait<T>(element);
wait.Until(condition);
return this;
}
}
[TestClass]
public class ActionTests
{
[TestMethod]
public void WaitForTest() {
IWebDriver driver = new PhantomJSDriver();
IWebElement bar = driver.FindElement(By.Id("bar"));
Actions a = new My.Selenium.Extensions.Actions(driver);
// Note that this will pass the compiler test, but does
// not necessarily work as intended
a.WaitFor(bar, (foo) => { return foo.FindElement(By.CssSelector("table")); } );
// what I would ideally like to do is more like:
// a.WaitFor(bar, (bar) => { return bar.GetCssValue("opacity") == "1.0"; } );
}
}
}
上記のコードはコンパイルされます (ただし、実際に意図したとおりに動作するかどうかはわかりません)。
私の最終的な目標は、現在の C# webdriver の「標準」またはラムダ構文評価ExpectedConditions
を使用した独自の動的評価を使用して、その場で「waitfor」条件を動的に作成できるようにすることです。IWebElement
私の問題タイプまたは名前空間 T2 が見つからないと言われているためWaitFor<T>
、上記のクラスの宣言にあるようです。Func<T,T2>
プロジェクトのソースはこちら: https://code.google.com/p/selenium/source/browse/
いくつかの関連するクラスで
https://code.google.com/p/selenium/source/browse/dotnet/src/webdriver/Interactions/Actions.cs
https://code.google.com/p/selenium/source/browse/dotnet/src/support/UI/DefaultWait.cs
私がモデル化しようとしている例:
予想される条件: https://code.google.com/p/selenium/source/browse/dotnet/src/support/UI/ExpectedConditions.cs
および WebDriverWait: https://code.google.com/p/selenium/source/browse/dotnet/src/support/UI/WebDriverWait.cs