回答:
.NET言語バインディングのオブジェクト、メソッド、およびプロパティ名は、Javaバインディングのオブジェクト名、メソッド名、およびプロパティ名と正確に対応していません。プロジェクトの原則の1つは、各言語バインディングが、その言語での快適なコーディングに「自然に感じる」必要があることです。C#では、JavaScriptを実行するために必要なコードは次のとおりです。
IWebDriver driver; // assume assigned elsewhere
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
string title = (string)js.ExecuteScript("return document.title");
WebDriver API for .NETの完全なドキュメントは、このリンクにあります。
arguments[0].click();
は私のために働いていませんか?コードを実行しても例外はありませんが、ボタンはクリックされません。
ExecuteJavascript
単なるメソッドではないのdriver
ですか?
WebDriver.Support.dll
内のNuGetを介して利用可能Selenium.Support
)には、キャストを処理し、ドライバーにExecuteJavaScript
メソッドがあるように見える拡張メソッドがあります。
私はスクリプトオブジェクトを取得するために拡張メソッドを使用することを好みます:
public static IJavaScriptExecutor Scripts(this IWebDriver driver)
{
return (IJavaScriptExecutor)driver;
}
これとして使用:
driver.Scripts().ExecuteScript("some script");
@Morten Christiansenの素晴らしい拡張メソッドのアイデアを少し簡略化したバージョンはどうですか。
public static object Execute(this IWebDriver driver, string script)
{
return ((IJavaScriptExecutor)driver).ExecuteScript(script);
}
// usage
var title = (string)driver.Execute("return document.title");
または多分一般的なバージョン:
public static T Execute<T>(this IWebDriver driver, string script)
{
return (T)((IJavaScriptExecutor)driver).ExecuteScript(script);
}
// usage
var title = driver.Execute<string>("return document.title");
nugetパッケージにSelenium.Support
は、これを支援する拡張メソッドがすでに含まれています。それが含まれると、実行スクリプトへの1つのライナー
Driver.ExecuteJavaScript("console.clear()");
または
string result = Driver.ExecuteJavaScript<string>("console.clear()");
IJavaScriptExecutor
、戻り値の型がnullである場合に、それを目的の戻り値の型にキャストできない、またはキャストできない場合に、より適切な例外メッセージを提供します。
Driver
?VSはそれを認識できません
あなたも行うことができます:
public static IWebElement FindElementByJs(this IWebDriver driver, string jsCommand)
{
return (IWebElement)((IJavaScriptExecutor)driver).ExecuteScript(jsCommand);
}
public static IWebElement FindElementByJsWithWait(this IWebDriver driver, string jsCommand, int timeoutInSeconds)
{
if (timeoutInSeconds > 0)
{
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds));
wait.Until(d => d.FindElementByJs(jsCommand));
}
return driver.FindElementByJs(jsCommand);
}
public static IWebElement FindElementByJsWithWait(this IWebDriver driver, string jsCommand)
{
return FindElementByJsWithWait(driver, jsCommand, s_PageWaitSeconds);
}
public void javascriptclick(String element)
{
WebElement webElement=driver.findElement(By.xpath(element));
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].click();",webElement);
System.out.println("javascriptclick"+" "+ element);
}
public static class Webdriver
{
public static void ExecuteJavaScript(string scripts)
{
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
js.ExecuteScript(scripts);
}
public static T ExecuteJavaScript<T>(string scripts)
{
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
return (T)js.ExecuteScript(scripts);
}
}
あなたのコードではそれから
string test = Webdriver.ExecuteJavaScript<string>(" return 'hello World'; ");
int test = Webdriver.ExecuteJavaScript<int>(" return 3; ");