执行jscript命令后Selenium挂起

时间:2016-10-04 14:02:26

标签: java selenium hang jscript

我正在尝试单击执行以下方法的动态菜单:

public void clicaItemSubMenu(String item) throws InterruptedException{
    String link = driver.findElement(By.xpath("//*[contains(text(), '" + item + "')]")).getAttribute("Id");
    driver.get("javascript:document.getElementById('" + link + "').click()");
}

代码工作正常,菜单正在打开,之后,Selenium挂起FireFox或Internet Explorer。如果我调试代码,问题就不会发生。我试图处理一些等待的东西,但没有成功。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

实际上WebDriver::get()用于在当前浏览器窗口中加载新网页。这是使用HTTP GET操作完成的,当您想要使用JavaScript执行点击元素时,该方法将会阻止,直到加载完成。

您应该尝试使用JavascriptExecutor::executeScript()在当前所选框架或窗口的上下文中执行JavaScript,如下所示: -

public void clicaItemSubMenu(String item) throws InterruptedException{
  WebElement link = driver.findElement(By.xpath("//*[contains(text(), '" + item + "')]"));
  ((JavascriptExecutor)driver).executeScript("arguments[0].click()", link);
 }

注意: - 您可以使用WebElement方法直接点击link.click() JavascriptExecutor,而不使用Spinner keyValueSpinner = (Spinner) rootView.findViewById(R.id.spinner_key_value); KeyValueArrayAdapter adapter = new KeyValueArrayAdapter(getActivity(),android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); adapter.setEntries(getResources().getStringArray(R.array.statusTitle)); adapter.setEntryValues(getResources().getStringArray(R.array.statusId)); keyValueSpinner.setAdapter(adapter)