Jawaban:
Nama objek, metode, dan properti di binding bahasa .NET tidak sama persis dengan yang ada di binding Java. Salah satu prinsip dari proyek ini adalah bahwa setiap pengikatan bahasa harus "terasa alami" bagi mereka yang nyaman membuat kode dalam bahasa tersebut. Di C #, kode yang Anda inginkan untuk menjalankan JavaScript adalah sebagai berikut
IWebDriver driver; // assume assigned elsewhere
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
string title = (string)js.ExecuteScript("return document.title");
Perhatikan bahwa dokumentasi lengkap API WebDriver untuk .NET dapat ditemukan di tautan ini .
arguments[0].click();
tidak berhasil untuk saya? Saya tidak memiliki pengecualian ketika saya menjalankan kode saya, tetapi tidak mengklik tombol.
ExecuteJavascript
tidak hanya metode di driver
?
WebDriver.Support.dll
, tersedia melalui NuGet dalam Selenium.Support
paket), ada metode ekstensi yang menangani casting untuk Anda dan membuatnya tampak seperti pengemudi memiliki ExecuteJavaScript
metode.
Saya lebih suka menggunakan metode ekstensi untuk mendapatkan objek skrip:
public static IJavaScriptExecutor Scripts(this IWebDriver driver)
{
return (IJavaScriptExecutor)driver;
}
Digunakan sebagai ini:
driver.Scripts().ExecuteScript("some script");
Bagaimana dengan versi sederhana dari ide metode ekstensi @Morten Christiansen yang bagus:
public static object Execute(this IWebDriver driver, string script)
{
return ((IJavaScriptExecutor)driver).ExecuteScript(script);
}
// usage
var title = (string)driver.Execute("return document.title");
atau mungkin versi generik:
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");
paket nuget Selenium.Support
sudah berisi metode ekstensi untuk membantu hal ini. Setelah itu disertakan, satu liner untuk menjalankan skrip
Driver.ExecuteJavaScript("console.clear()");
atau
string result = Driver.ExecuteJavaScript<string>("console.clear()");
IJavaScriptExecutor
dan memberikan pesan pengecualian yang lebih baik jika jenis kembalian adalah null ketika seharusnya tidak atau tidak dapat ditransmisikan ke jenis kembalian yang diinginkan.
Driver
? VS tidak bisa mengenali itu
Anda juga bisa melakukan:
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);
}
}
Dalam kode Anda, Anda kemudian dapat melakukannya
string test = Webdriver.ExecuteJavaScript<string>(" return 'hello World'; ");
int test = Webdriver.ExecuteJavaScript<int>(" return 3; ");
Kode terpendek
ChromeDriver drv = new ChromeDriver();
drv.Navigate().GoToUrl("/programming/6229769/execute-javascript-using-selenium-webdriver-in-c-sharp");
drv.ExecuteScript("return alert(document.title);");