我无法选择与 javascript 混合的列表。页面上的原始代码是这样的:
<select id="List_1" name="List_1">
<option value="">Select..</option>
<option value="val_1" >Orange</option>
<option value="val_2" >Apple</option>
<option value="val_3" >Peach</option>
</select>
但是当 JS 文件加载时,它会修改 List,当我查看 Generated Source 时,我得到了这个:
<div tabindex="0" style="-moz-user-select: none;" role="listbox" title="Fruit" class="fruit-box k-select">Select..</div>
而且 WatiN 再也找不到列表框了。
我试过:
browser.Element(Find.ById("Fruit")).Focus();
browser.Element(Find.ById("Fruit")).Click();
但这并没有触发下拉列表下降。然后我尝试使用 GoToNoWait(); 请求页面 然后使用循环查找列表,在加载 JS 之前修改它:
while (browser.SelectLists.Count <= 0)
{
Thread.Sleep(100); // wait until the first option list is loaded
}
foreach (WatiN.Core.SelectList a in brower.SelectLists)
{
if (a.IdOrName == "Fruit")
{
a.SelectByValue("val_1");
}
}
我首先可以看到列表在浏览器(不是 JS)中正常显示,但是在页面加载时循环挂起,并且在 foreach 循环有机会执行之前加载了 JS。
我唯一的解决方案是:
browser.Div(Find.ByTitle("Fruit")).Focus();
browser.Div(Find.ByTitle("Fruit")).Click();
browser.Div(Find.ByTitle("Fruit")).FireEvent("onClick");
SendKeys.SendWait("{DOWN}");
SendKeys.SendWait("{DOWN}");
SendKeys.SendWait("{ENTER}");
但是在使用 SendKeys 时,我需要将 firefox 窗口置于焦点,否则击键会发送到我当前打开的任何对我不起作用的应用程序。
有没有办法在添加 JS 之前选择选项列表?或者有没有办法使用 SendKeys 并将其指向特定的应用程序而不是当前专注的应用程序?谢谢!