我正在尝试访问应用程序中的屏幕,当我将鼠标悬停在选项卡上并单击其中一个选项时,会出现该屏幕。我使用了Actions方法来使用selenium来执行它。这是我的代码:
element=driver.findElement(By.id("tab"));
Actions hoverover=new Actions(driver);
hoverover.moveToElement(element).moveToElement(driver.findElement(By.id("menu"))).click().build().perform();
当我登录应用程序并直接调用此选项卡时,我可以毫无问题地访问它。但是,当我从应用程序中的不同屏幕访问此选项卡时,会出现此问题。
每当我从应用程序中的不同页面访问悬停页面时,有时页面会正确加载,但大部分时间它都会失败并且我收到“没有这样的元素”或“陈旧元素引用”错误。
我真的不确定它是如何能够在没有任何问题的情况下访问选项卡的,有时它会抛出错误。请在这里指导我,如果还有其他任何内容(任何其他功能/或操作的替代方法,请告诉我)。我可以这样做,鼠标悬停点击始终有效。
编辑:我尝试同时使用Explicit和Implicit等待,甚至尝试使用thread.sleep,但是徒劳无功。在Chrome(仅限Chrome)中,当我尝试访问该标签时进行手动屏幕刷新时,它可以正常工作。但是当我在我的代码[driver.navigate()。refresh()]中执行相同操作时,它无法正常工作!!答案 0 :(得分:0)
陈旧元素异常可能发生在您设置元素和悬停时之间。 Selenium做了类似的事情:
WebElement element = driver.findElement(By.id("tab"));
// "element" has been set
Actions hoverover=new Actions(driver);
// Between here and hoverover, "element" has changed on the DOM
hoverover.moveToElement(element).moveToElement(
driver.findElement(By.id("menu"))).click().build().perform();
// Uh-oh, what's "element?" Better throw an exception!
尝试删除element =行并将driver.findElement移动到moveToElement()的内部。
Actions hoverover = new Actions(driver);
hoverover.moveToElement(driver.findElement(By.id("tab")))
.moveToElement(driver.findElement(By.id("menu"))).click().build().perform();
您还可以尝试在将鼠标悬停在标签页和菜单上之间投入WebDriverWait。
hoverover.moveToElement(driver.findElement(By.id("tab"))).build().perform();
new WebDriverWait(driver, 10))
.until(ExpectedConditions.presenceOfElementLocated(By.id("menu")));
hoverover.moveToElement(driver.findElement(By.id("menu"))).click().build().perform();