답변:
.NET 언어 바인딩의 개체, 메서드 및 속성 이름은 Java 바인딩의 이름과 정확히 일치하지 않습니다. 프로젝트의 원칙 중 하나는 각 언어 바인딩이 해당 언어로 편안한 코딩을 할 때 "자연 스러워야"한다는 것입니다. C #에서 JavaScript를 실행하기 위해 원하는 코드는 다음과 같습니다.
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
패키지의 NuGet을 통해 사용 가능 )에는 캐스팅을 처리하고 드라이버에 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
에는 이미이를 지원하는 확장 메서드가 포함되어 있습니다. 포함되면 실행자 스크립트에 하나의 라이너
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; ");
가장 짧은 코드
ChromeDriver drv = new ChromeDriver();
drv.Navigate().GoToUrl("/programming/6229769/execute-javascript-using-selenium-webdriver-in-c-sharp");
drv.ExecuteScript("return alert(document.title);");