Javascript 硒罐';t在选择下拉菜单上更改时立即点火
这是我第一次遇到Select的问题,即Selnium webdriver无法在其上启动onchange 代码与往常一样:Javascript 硒罐';t在选择下拉菜单上更改时立即点火,javascript,java,selenium-webdriver,automated-tests,selenium-chromedriver,Javascript,Java,Selenium Webdriver,Automated Tests,Selenium Chromedriver,这是我第一次遇到Select的问题,即Selnium webdriver无法在其上启动onchange 代码与往常一样: Select country = new Select(driver().findElement(By.id("address.country"))); country.selectByValue("dk"); 当测试运行时,至少在界面上成功地选择了国家/地区,但当我单击提交表单时,它会显示“未填写必填字段”,并在该国家/地区选择处高
Select country = new Select(driver().findElement(By.id("address.country")));
country.selectByValue("dk");
当测试运行时,至少在界面上成功地选择了国家/地区,但当我单击提交表单时,它会显示“未填写必填字段”,并在该国家/地区选择处高亮显示。当我手动单击以选择一个国家时,它就会起作用
我看到此国家/地区选择有3个事件blur
、change
和focus
。因此,我在选择一个国家后,尝试使用Javascript触发它,如下所示:
js().executeScript("arguments[0].onchange", country);
但这也没用。前端框架是Nuxt.js(vju)
有什么想法吗?谢谢
已更新 尝试了@KonstantinPribluda的建议,作为以下检查方法,但也没有帮助
public Boolean isDropdownChanged(WebElement element) {
WebDriver driver = ((RemoteWebElement)element).getWrappedDriver();
return (Boolean) ((JavascriptExecutor)driver).executeScript("" +
"var target = document.evaluate(\"//*[@id='address.country']\", document.body, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null).iterateNext(); " +
" if(!target.disabled) { " +
"target.click(); " +
"return true; " +
"} " +
"return false;"
, element);
}
嗯,似乎有某种形式的验证不令人满意。可能事件没有正确传播?有些框架有奇怪的事件处理程序。我在使用JSF时遇到了很多问题,将JS完全委托给浏览器通常可以做到这一点:target=document.evaluate(“无论您喜欢哪个xpath选择器”,document.body,null,XPathResult.UNORDERED_NODE_ITERATOR_TYPE,null)。iterateNext();如果(!target.disabled){target.click();return true}@KonstantinPribluda:谢谢你的建议。我将您的技巧转换为java方法,但没有任何帮助。我不能在评论中发布我的代码,所以我更新了我的问题。我同意@KonstantinPribluda。在某些前端框架中,
select
下拉列表仅用于显示目的。实际功能构建在select
标记之上,作为“facade”。此外观实际处理与select
下拉菜单关联的事件触发。单击select
标记时,监视DOM(父容器、页脚等)中作为select
下拉列表外观的HTML元素的任何新添加。如果是,那么您应该触发选择
,然后单击
,或者在facade元素上执行与选项相关的选择。@Ragnarsson我会首先在浏览器工具中调试javscript,以确定这一点-我是为我们的JSF应用程序开发的,它有很多怪癖(最近的更新使它几乎无法运行-因为点击是通过下拉列表顶部的透明覆盖处理的)-你在前端使用什么?@KonstantinPribluda,这是一个新项目,我们使用Nuxt.js(vju)嗯,似乎有某种形式的验证不满意。可能事件没有正确传播?一些框架有奇怪的事件处理程序。我对JSF有很多问题,完全委托给浏览器JS通常会起到作用:target=document.evaluate(“您喜欢什么样的xpath选择器”,document.body,null,XPathResult.UNORDERED_NODE_ITERATOR_TYPE,null)。iterateNext();如果(!target.disabled){target.click();返回true}@KonstantinPribluda:谢谢你的建议。我将你的技巧转换成了java方法,但没有任何帮助。我无法在评论中发布我的代码,所以我在问题中进行了更新。我同意@KonstantinPribluda。在一些前端框架中,选择
下拉菜单仅用于显示目的。实际功能是建立在f将select
标记作为“facade”。此facade实际处理与select
下拉列表关联的事件触发。单击select
标记时,监视DOM(父容器、页脚等)对于充当选择
下拉列表外观的HTML元素的任何新添加。如果是,则应触发选择
,然后单击
,或在外观元素上执行与选项相关的选择。@Ragnarsson我将首先在浏览器工具中调试javscript以确保-我为我们的JSF应用程序开发了它有很多怪癖(最近的更新使它几乎不稳定-因为点击是通过下拉列表顶部的透明覆盖处理的)-你在前端使用什么?@KonstantinPribluda,这是一个新项目,我们使用Nuxt.js(vju)