সি # তে সেলেনিয়াম ওয়েবড্রাইভার ব্যবহার করে জাভাস্ক্রিপ্ট কার্যকর করুন


103

এটি কীভাবে অর্জিত হয়? এখানে এটি জাভা সংস্করণটি বলে:

WebDriver driver; // Assigned elsewhere
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("return document.title");

তবে আমি এটি করতে সি # কোড খুঁজে পাচ্ছি না।

উত্তর:


216

.NET ভাষার বাইন্ডিংগুলিতে থাকা অবজেক্ট, পদ্ধতি এবং সম্পত্তির নাম জাভা বাইন্ডিংগুলিতে হুবহু মিলে না। প্রকল্পের অন্যতম মূলনীতি হ'ল প্রতিটি ভাষার বাইন্ডিং সেই ভাষাতে আরামদায়ক কোডিংয়ের জন্য "স্বাভাবিক বোধ করা উচিত"। সি # তে, আপনি জাভাস্ক্রিপ্ট চালানোর জন্য যে কোডটি চান তা নিম্নরূপ

IWebDriver driver; // assume assigned elsewhere
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
string title = (string)js.ExecuteScript("return document.title");

নোট করুন .NET এর জন্য ওয়েবড্রাইভার এপিআইয়ের সম্পূর্ণ ডকুমেন্টেশন এই লিঙ্কটিতে পাওয়া যাবে ।


10
জাভা এস ক্রাইপ শব্দের মূলধনটি নোট করুন । এটি আমাকে ধরে ফেলল।
যেখানে থেরেসা উইল

1
জিমের উত্তর আপনি পেতে পারেন হিসাবে প্রায় অনুমোদিত। প্রতি সেলেনিয়াম। নেট ফাইলটি :-)
রস প্যাটারসন

আপনি কি আমাকে সি # এর একটি বোতাম ক্লিক করতে পারেন দয়া করে বলতে পারেন? মত উত্তর arguments[0].click();আমার জন্য কাজ করছে না? আমি আমার কোডটি কার্যকর করি তখন আমার কোনও ব্যতিক্রম নেই, তবে এটি বোতামটি ক্লিক করে না।
অ্যালমেট

আমার কাছে এটাতো অবাক লাগছে যে আমাকে ড্রাইভার কাস্ট করতে হবে। কেন ExecuteJavascriptশুধুমাত্র একটি পদ্ধতি নয় driver?
কলব ক্যানিয়ন

এটি প্রতিটি সময় প্রয়োগকারী স্বেচ্ছাসেবী জাভাস্ক্রিপ্ট কার্যকর করতে সমর্থ নয় from জাভা জাতীয়গুলির মতো। নেট বাইন্ডিংগুলি মডেল কার্যকারিতার জন্য রোল-ভিত্তিক ইন্টারফেসগুলি ব্যবহার করে যা কোনও ড্রাইভার দ্বারা সমর্থিত হতে পারে তবে সমস্ত নয়। সাপোর্ট WebDriver.Support.dllঅ্যাসেমব্লিতে ( , Selenium.Supportপ্যাকেজে নুগেটের মাধ্যমে উপলভ্য ) এখানে একটি এক্সটেনশন পদ্ধতি রয়েছে যা আপনার জন্য castালাই হ্যান্ডেল করে এবং এটিকে দেখে মনে হয় যে ড্রাইভারটির কোনও ExecuteJavaScriptপদ্ধতি রয়েছে।
জিমএভান্স

51

স্ক্রিপ্টস বস্তুটি পেতে আমি একটি এক্সটেনশন পদ্ধতি ব্যবহার করতে পছন্দ করি:

public static IJavaScriptExecutor Scripts(this IWebDriver driver)
{
    return (IJavaScriptExecutor)driver;
}

এটি হিসাবে ব্যবহৃত:

driver.Scripts().ExecuteScript("some script");

সেলেনিয়ামের এটি ডিফল্টরূপে হওয়া উচিত
কলব ক্যানিয়ন

13

@ মর্টেন ক্রিশ্চেনসেনের দুর্দান্ত এক্সটেনশন পদ্ধতি আইডিয়াটির সামান্য সরলীকৃত সংস্করণ সম্পর্কে কীভাবে:

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");

1
এটি কি ওয়েবএলিমেন্ট এবং বুল পেতেও ব্যবহার করা যেতে পারে?
রাহুল্ম

12

নুগেট প্যাকেজে Selenium.Supportইতিমধ্যে এটিতে সহায়তা করার জন্য একটি এক্সটেনশন পদ্ধতি রয়েছে। এটি অন্তর্ভুক্ত হয়ে গেলে, এক লাইনারে এক্সিকিউটার স্ক্রিপ্ট

  Driver.ExecuteJavaScript("console.clear()");

অথবা

  string result = Driver.ExecuteJavaScript<string>("console.clear()");

এটি একটি দুর্দান্ত, আধুনিক সমাধান। এক্সটেনশন পদ্ধতিটি বৈধতা যুক্ত করে যা ড্রাইভার প্রয়োগ করে IJavaScriptExecutorএবং কাঙ্ক্ষিত রিটার্ন টাইপটিতে কাস্ট করা যায় না এমন ক্ষেত্রে রিটার্নের ধরণটি বাতিল হলে ভাল ব্যতিক্রম বার্তা দেয়।
জেফরি লেকর্স

কি Driver? ভিএস তা বুঝতে পারে না
আনাতল

আপনি কি নুগেটটি ইনস্টল করেছেন ??
হ্যারিশার

8

আপনি এছাড়াও করতে পারেন:

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);
}

2
চমৎকার ধারণা. অন্যদের এটি পড়ার জন্য, আপনার জাভাস্ক্রিপ্ট কোডটিতে একটি ডিওএম উপাদান ফেরত দেওয়া উচিত।
joelsand

আমি এটিকে সম্ভব হিসাবে বিবেচনাও করি নি। এটি এখন বিশাল যা আমি এখন জাভাস্ক্রিপ্ট ব্যবহার করে নেক্সটসিলিংয়ে ফিরে আসতে একটি পদ্ধতি তৈরি করতে পারি।
jibbs

1
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);

    }

0
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; ");

0

সংক্ষিপ্ততম কোড

ChromeDriver drv = new ChromeDriver();

drv.Navigate().GoToUrl("/programming/6229769/execute-javascript-using-selenium-webdriver-in-c-sharp");

drv.ExecuteScript("return alert(document.title);");

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.