use*_*963 1 javascript c# jquery watin
我正在尝试使用Watin 从此页面中选择第一个资产选择下拉列表中的项目,但无法获得任何工作.
此示例链接实际上具有相同的控件,并且代码完美运行Watin无法从选择列表中选择选项
但是,尝试应用相同的逻辑确实找到了正确的元素,但没有选择任何内容.有人可以帮助确定为什么这不起作用?
[Test]
public void ChosenTest()
{
IE myIE = new IE(true);
myIE.GoTo("http://www.marketoptions.com/trading-platform/");
myIE.SelectList(Find.ByClass("assetSelect chzn-ltr chzn-done")).WaitUntilExists();
string id = myIE.SelectList(Find.ByClass("assetSelect chzn-ltr chzn-done")).Id;
myIE.Div(id + "_chzn").Div(Find.ByClass("chzn-drop")).ElementWithTag("li", Find.ByIndex(7)).Click();
myIE.Div(id + "_chzn").Links[0].Spans[0].Click();
}
Run Code Online (Sandbox Code Playgroud)
编辑:看起来css样式有一些影响,不允许Watin单击或选择标准的html控件.如果有人能够生成一个可以从资产下拉菜单中选择项目的工作测试,并解释为什么当前代码不起作用,我将提供一笔赏金.
我花了一些时间看这个并认为问题归结为你正在使用一个ajax控件,它实际上用动态生成的html替换了选择列表.事实上,原始选择被隐藏,这使得改变成为问题.
我过去解决这类问题的方法是使用ajax控件javascript API设置值,然后使用Watin执行脚本来触发它的方法.
这是我的代码:
IE myIE = new IE();
myIE.GoTo("http://www.marketoptions.com/trading-platform/");
myIE.SelectList(Find.ByClass("assetSelect chzn-ltr chzn-done")).WaitUntilExists();
// remove the currently selected value
myIE.DomContainer.Eval("$('td.assetControl select option').removeAttr('selected');");
// set the new selected value
myIE.DomContainer.Eval("$('td.assetControl select option:contains(EUR/JPY)').attr('selected', 'selected');");
// update the ajax control to refresh the UI
myIE.DomContainer.Eval("$('td.assetControl select').trigger('liszt:updated');");
// sit back and enjoy the view as you hopefully see the UI showing the value that you wanted :)
Thread.Sleep(8000);
Run Code Online (Sandbox Code Playgroud)
显然,您需要将EUR/JPY更改为您想要的值.
另外,请注意我使用td.assetControl select作为选择器.这假定它是此单元格中唯一的选择.当我第一次在浏览器中尝试使用时,您使用的选择器实际上找到了4个匹配项.所以也许这也会导致一些问题.如果您认为它可能保持不变,那么您可以使用的选项上有一个id(看起来它可能会自动生成)
希望这对你有用!让我知道你是怎么办的.