所以我有这几行代码,我正在使用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
,但如果我自己在网站上试用代码,它完美地回报了我的信息。
我的问题是:为什么可能是原因,如果我自己检查我能得到答复。
答案 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.");
}