[C#/Selenium] IWebDriver.ExecuteJavascript 캐스팅이 잘못됐다는 에러가 뜰 경우

  아주 간단한 디버그로 원인 파악 및 해결이 가능합니다.

  우선, 아래와 같은 코드가 있습니다.


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이 발생하지 않게 됐습니다.

댓글

이 블로그의 인기 게시물

C# 남아도는 메모리에도 불구하고 OutOfMemoryException이 발생한다면?

USB를 뒤는 괜찮은데 앞에 꽂으면 인식이 힘들다?

MySQL 데이터 타입과 Java 데이터 타입 비교/매칭