[C#/Selenium] IWebDriver.ExecuteJavascript 캐스팅이 잘못됐다는 에러가 뜰 경우
아주 간단한 디버그로 원인 파악 및 해결이 가능합니다.
우선, 아래와 같은 코드가 있습니다.
얼핏 봐서는 정상 작동할 것 같이 생겼지만, 런타임에 WebDriverException, 결과값은 리턴됐으나 캐스팅이 잘못됐다는 에러를 뿜게 되죠..
일단 에러 설명에 결과값은 리턴됐다고 하므로, 디버그를 해 봅시다.
이제 런타임에 출력 창을 보면, System.Int64 또는 값에 따라서 System.Float, System.Double 등등이 보일 겁니다. 저 같은 경우는, System.Int64였죠.
캐스팅해야할 타입을 디버그로 알아냈으니 그대로 적용합니다.
이제 런타임에 캐스팅이 잘못되었단 WebDriverException이 발생하지 않게 됐습니다.
우선, 아래와 같은 코드가 있습니다.
public static int GetPageOfSomePage(this IWebDriver driver)
{
return driver.ExecuteJavascript<int>(@"
if (typeof(page) === 'undefined')
return 0;
return page.current;
");
}
얼핏 봐서는 정상 작동할 것 같이 생겼지만, 런타임에 WebDriverException, 결과값은 리턴됐으나 캐스팅이 잘못됐다는 에러를 뿜게 되죠..
일단 에러 설명에 결과값은 리턴됐다고 하므로, 디버그를 해 봅시다.
public static object GetPageOfSomePage(this IWebDriver driver)
{
var obj = driver.ExecuteJavascript<object>(@"
if (typeof(page) === 'undefined')
return 0;
return page.current;
");
Debug.WriteLine(obj.GetType());
return obj;
}
이제 런타임에 출력 창을 보면, System.Int64 또는 값에 따라서 System.Float, System.Double 등등이 보일 겁니다. 저 같은 경우는, System.Int64였죠.
캐스팅해야할 타입을 디버그로 알아냈으니 그대로 적용합니다.
public static long GetPageOfSomePage(this IWebDriver driver)
{
return driver.ExecuteJavascript<long>(@"
if (typeof(page) === 'undefined')
return 0;
return page.current;
");
}
이제 런타임에 캐스팅이 잘못되었단 WebDriverException이 발생하지 않게 됐습니다.
댓글
댓글 쓰기