Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 硒罐';t在选择下拉菜单上更改时立即点火_Javascript_Java_Selenium Webdriver_Automated Tests_Selenium Chromedriver - Fatal编程技术网

Javascript 硒罐';t在选择下拉菜单上更改时立即点火

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的问题,即Selnium webdriver无法在其上启动onchange

代码与往常一样:

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)