जवाबों:
.NET लैंग्वेज बाइंडिंग में ऑब्जेक्ट, मेथड, और प्रॉपर्टी के नाम जावा बाइंडिंग के अनुरूप नहीं हैं। परियोजना के सिद्धांतों में से एक यह है कि प्रत्येक भाषा बाध्यकारी को उस भाषा में सहज कोडिंग के लिए "प्राकृतिक महसूस करना" चाहिए। C # में, जावास्क्रिप्ट को निष्पादित करने के लिए आपको जो कोड चाहिए वह इस प्रकार है
IWebDriver driver; // assume assigned elsewhere
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
string title = (string)js.ExecuteScript("return document.title");
ध्यान दें कि .NET के लिए WebDriver API का पूरा प्रलेखन इस लिंक पर पाया जा सकता है ।
arguments[0].click();
मेरे लिए काम नहीं कर रहा है? मेरे कोड को निष्पादित करने पर मेरे पास कोई अपवाद नहीं है, लेकिन यह बटन पर क्लिक नहीं करता है।
ExecuteJavascript
सिर्फ एक विधि पर क्यों नहीं है driver
?
WebDriver.Support.dll
, Selenium.Support
पैकेज में नुगेट के माध्यम से उपलब्ध ), एक विस्तार विधि है जो आपके लिए कास्टिंग को संभालती है और यह बनाती है जैसे ड्राइवर के पास एक ExecuteJavaScript
विधि है।
मैं स्क्रिप्ट ऑब्जेक्ट प्राप्त करने के लिए एक एक्सटेंशन विधि का उपयोग करना पसंद करता हूं:
public static IJavaScriptExecutor Scripts(this IWebDriver driver)
{
return (IJavaScriptExecutor)driver;
}
इस रूप में इस्तेमाल किया:
driver.Scripts().ExecuteScript("some script");
कैसे के बारे में थोड़ा सरल संस्करण @Morten ईसाई का अच्छा विस्तार विधि विचार:
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
पहले से ही इसकी सहायता के लिए एक विस्तार विधि है। एक बार इसे शामिल करने के बाद, स्क्रिप्ट को निष्पादित करने के लिए एक लाइनर
Driver.ExecuteJavaScript("console.clear()");
या
string result = Driver.ExecuteJavaScript<string>("console.clear()");
IJavaScriptExecutor
और बेहतर अपवाद संदेश देता है यदि वापसी प्रकार अशक्त है जब यह वांछित रिटर्न प्रकार के लिए नहीं होना चाहिए या नहीं डाला जा सकता है।
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; ");
सबसे छोटा कोड
ChromeDriver drv = new ChromeDriver();
drv.Navigate().GoToUrl("/programming/6229769/execute-javascript-using-selenium-webdriver-in-c-sharp");
drv.ExecuteScript("return alert(document.title);");