我在文档中编写了样本:
var driver = new InternetExplorerDriver();
driver.Navigate().GoToUrl("http://google.com");
var query = driver.FindElement(By.Name("q"));
query.SendKeys("Cheese");
Console.WriteLine("Title is: " + driver.Title);
driver.Quit();
但我总是得到Unable to find element with name == q
错误。
IE9已打开,谷歌页面已加载,我可以阅读driver.Title
,但无法按名称,选择器或ID找到任何元素。
有什么想法吗?
UPD :
可怕的是,此代码适用于我的桌面(Windows 7,VS 2010 Express),并且无法在虚拟机中运行(VmWare播放器,Windows 2008 R2 SP 1试用版,VS 2010 Ultimate试用版): - (
它不适用于自定义虚拟<input name="q" />
页面
UPD 2 :
该代码适用于Firefox驱动程序,但不适用于IE。
解:
对于Windows服务器安装,似乎该网站应该处于“可信”状态。我不确定原因,但将google.com
添加到信任解决问题
答案 0 :(得分:2)
对于Windows服务器安装,该站点应处于“受信任”状态。我不确定原因,但将google.com添加到信任解决问题
答案 1 :(得分:0)
问题可能是因为谷歌搜索框现在在页面加载后加载,因此当selenium搜索它时可能会出现控件不存在的情况。
在这种情况下使用自定义搜索方法,在方法中应该有以下代码:
for (var retry = 0; retry < 10; retry++)
{
try
{
if (driver.Until(driver => driver.FindElement(searchBy).Displayed))
return;
}
catch (StaleElementReferenceException)
{
}
}
希望这有帮助。
更新: 此外,由于作者提到了IE的安全问题,我想指出,我认为你不必将它设置为信任所有你需要共享相同安全级别的站点。
答案 2 :(得分:-1)
Zerkms,尝试在.navigate语句之后放置一些等待时间也使用xpath来定位元素,如果按名称不起作用。