为什么我不能在 Selenium 3.0 中使用 LINQ 和 IJavaScriptExecutor,如何解决?
Why I cannot use LINQ and IJavaScriptExecutor in Selenium 3.0 and how to solve it?
我使用以下规格进行测试:
Mozilla Firefox 46.1
Selenium WebDriver 2.53.1 via Nuget
Windows 10 64bit
这是我的代码
using (IWebDriver driver = new FirefoxDriver())
{
driver.Navigate().GoToUrl("someURL");
//error
var e_email = driver.FindElements(By.TagName("input"))
.Where(x => x.GetAttribute("name") == "email"
&& x.GetAttribute("Placeholder") == "Guest Email").FirstOrDefault();
//also error
string js = "var paras = document.getElementsByClassName('someClass');for(var i=0;i<paras.length;i++) {{ paras[i].parentNode.removeChild(paras[i]);}}";
((IJavaScriptExecutor)driver).ExecuteScript(js);
}
以上代码在Mozilla Firefox 46.1
和Selenium 2.53.1
中运行良好。当我用 geckodriver 0.11.1
更新 Selenium to ver 3.0
和 Mozilla Firefox to ver 47
时出现错误
它在更新到较新版本后执行时为 LINQ 生成 error : Permission denied to access property 'navigator'
,为 IJavaScriptExecutor 生成 Permission denied to access property 'document'
。为什么会发生这种情况以及如何解决这个问题?
我在等待 WebDriverWait 中相当复杂的 XPath 时遇到了类似的问题,最终解决它的方法是将 Firefox 更新到 49.0.2。
我使用以下规格进行测试:
Mozilla Firefox 46.1
Selenium WebDriver 2.53.1 via Nuget
Windows 10 64bit
这是我的代码
using (IWebDriver driver = new FirefoxDriver())
{
driver.Navigate().GoToUrl("someURL");
//error
var e_email = driver.FindElements(By.TagName("input"))
.Where(x => x.GetAttribute("name") == "email"
&& x.GetAttribute("Placeholder") == "Guest Email").FirstOrDefault();
//also error
string js = "var paras = document.getElementsByClassName('someClass');for(var i=0;i<paras.length;i++) {{ paras[i].parentNode.removeChild(paras[i]);}}";
((IJavaScriptExecutor)driver).ExecuteScript(js);
}
以上代码在Mozilla Firefox 46.1
和Selenium 2.53.1
中运行良好。当我用 geckodriver 0.11.1
Selenium to ver 3.0
和 Mozilla Firefox to ver 47
时出现错误
它在更新到较新版本后执行时为 LINQ 生成 error : Permission denied to access property 'navigator'
,为 IJavaScriptExecutor 生成 Permission denied to access property 'document'
。为什么会发生这种情况以及如何解决这个问题?
我在等待 WebDriverWait 中相当复杂的 XPath 时遇到了类似的问题,最终解决它的方法是将 Firefox 更新到 49.0.2。