반응형
C #에서 Selenium WebDriver를 사용하여 JavaScript 실행
이것이 어떻게 달성 검증? 여기 에서 자바 버전은 다음과 가변 .
WebDriver driver; // Assigned elsewhere
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("return document.title");
하지만이 작업을 수행하는 C # 코드를 수행 할 수 없습니다.
.NET 언어 바인딩의 개체, 방법 및 속성 이름은 Java 바인딩의 이름과 정확히 일치하지 않습니다. 프로젝트의 원칙 중 하나는 각 언어 바인딩이 해당 언어로 편안한 코딩을 할 때 "자연 스러워야"한다는 것입니다. C #에서 JavaScript를 사용하기 위해 원하는 코드는 다음과 실행 가능합니다.
IWebDriver driver; // assume assigned elsewhere
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
string title = (string)js.ExecuteScript("return document.title");
.NET 용 WebDriver API의 전체 문서는 이 링크 에서 사용할 수 있습니다 .
확장 방법을 사용하여 펼쳐 개체를 얻는 것을 선호합니다.
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()");
다음을 수행 할 수도 있습니다.
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; ");
참고 URL : https://stackoverflow.com/questions/6229769/execute-javascript-using-selenium-webdriver-in-c-sharp
반응형
'IT' 카테고리의 다른 글
페이드 표시 방법 : 인라인 블록 (0) | 2020.08.24 |
---|---|
iOS : 두 날짜 비교 (0) | 2020.08.24 |
Doctrine 2를 사용하여 원시 SQL 실행 (0) | 2020.08.24 |
Rails 3-pg gem을 사용할 수 없습니다. (0) | 2020.08.24 |
명령 줄에서 VS Code Editor를 호출하는 방법 (0) | 2020.08.24 |