Javascript 从下拉列表中选择项目不会';t使用Selenium启动angularjs函数
我试图用Selenium编写一个测试,从2个下拉列表中选择一个项目,然后单击一个按钮。我遇到的问题是,根据从第一个下拉列表中选择的项目,第二个下拉列表由angularjs调用填充。由于某些原因,angular调用从未运行,第二个列表从未填充,并导致错误。为什么在值更改时不执行angularjs调用 下拉列表示例:Javascript 从下拉列表中选择项目不会';t使用Selenium启动angularjs函数,javascript,angularjs,selenium,selenium-webdriver,Javascript,Angularjs,Selenium,Selenium Webdriver,我试图用Selenium编写一个测试,从2个下拉列表中选择一个项目,然后单击一个按钮。我遇到的问题是,根据从第一个下拉列表中选择的项目,第二个下拉列表由angularjs调用填充。由于某些原因,angular调用从未运行,第二个列表从未填充,并导致错误。为什么在值更改时不执行angularjs调用 下拉列表示例: <select id="itemList" style="width:495px;" onchange="angular.element($(this)).scope().ite
<select id="itemList" style="width:495px;" onchange="angular.element($(this)).scope().itemChanged(this);">
<option value="item1">Item 1</option>
<option value="item2">Item 2</option>
<option value="item3">Item 3</option>
</select>
它正确地从第一个下拉列表中选择项目,但是由于某些原因,angular调用没有运行以填充第二个下拉列表;如何运行该调用?如果selenium没有按应有的方式触发(单击、选择或其他操作后),则无法使用selenium强制执行该触发。您可以通过使用一些javascript强制执行它。
但是我建议您尝试使用
click()
而不是select
我可以通过手动触发onchange()事件来解决这个问题,该事件在填充第一个下拉列表后调用角度函数
IJavaScriptExecutor jse = (IJavaScriptExecutor)driver;
jse.ExecuteScript("$(arguments[0]).change();", driver.FindElement(By.Id("itemList")));
我还尝试获取所有选项并单击正确的选项代码>但结果似乎是一样的。选择的值是正确的,但该函数不会执行。
IJavaScriptExecutor jse = (IJavaScriptExecutor)driver;
jse.ExecuteScript("$(arguments[0]).change();", driver.FindElement(By.Id("itemList")));