返回NullReference,但它不为null

时间:2017-12-13 15:48:56

标签: c# selenium

所以我有这几行代码,我正在使用Selenium。

IJavaScriptExecutor js = driver as IJavaScriptExecutor;
string getInfo1 = (string)js.ExecuteScript("return angular.element(document.getElementById('bank-list')).scope().info1").ToString();
string getInfo2 = (string)js.ExecuteScript("return angular.element(document.getElementById('bank-list')).scope().info2").ToString();
string getInfo3 = (string)js.ExecuteScript("return angular.element(document.getElementById('bank-list')).scope().info3").ToString();

代码的第一行成功执行并返回示例James,但由于某种原因,代码的第二行返回null,但如果我自己在网站上试用代码,它完美地回报了我的信息。

我的问题是:为什么可能是原因,如果我自己检查我能得到答复。

1 个答案:

答案 0 :(得分:0)

Javascripts需要几毫秒才能使用Selenium执行。你可以处理它等待返回不同于null

IJavaScriptExecutor js = Driver as IJavaScriptExecutor;
var result = null as string;
new WebDriverWait(Driver, new TimeSpan(0, 0, 5)).Until(x => 
    (result = (string)js.ExecuteScript("your script")) != null);

或者,以一种丑陋的方式:

IJavaScriptExecutor js = Driver as IJavaScriptExecutor;
var result = null as string;
for (var i = 0; i <= 10000; i += 100)
{
    result = js.ExecuteScript("your script").ToString();
    if (!string.IsNullOrEmpty(result)) break;

    Thread.Sleep(100);
    if (i >= 5000) throw new Exception("timed out.");
}