Divi's answer to question 2 is fine. For part 1, you can check if the item is displayed as you said:
webElement.isDisplayed();
Or you can compare html pages before and after the event.
driver.getPageSource();
(Perhaps you can also check the URL if this changes after each event).
The only problem with getting the html source is that the event may have occurred after your last action and did not end, leaving the html the same. To get around this, you can check out some of the following conditions:
(Boolean) ((JavascriptExecutor)driver).executeScript("return jQuery.ready"); ((JavascriptExecutor)driver).executeScript("return document.readyState").equals("complete");
Or you can use another javascript framework that has a different function similar to jQuery.ready.
Finally, you may have a problem with triggering an event only after you change the active element, make a tab from the field, etc. So you can run something like:
Actions actionObject = new Actions(driver); actionObject.sendKeys(Key.TAB).perform();
Or you can use javascript to install it (I did not check the code below, and I would install webElement in the html base element):
((JavascriptExecutor) driver).executeScript("arguments[0].focus();", webElement);
I do not suggest using webdriver to click on the body element, as this may cancel your last click.
I include the Divi answer for Question 2 for completeness:
We can check if it is redirected to another page or not by receiving the URL of the page and comparing it with the expected URL
WebDriver driver; driver.getCurrentUrl()
if your current url does not match your expected url, you go in two ways
1) You can open the expected URL again using the Open function in selenium (or) webdriver navigation mode
driver.navigate().to("expected_url");
2) You can use reverse navigation
driver.navigate().back();