我的java / selenium项目突然给出错误,但元素仍然存在于Web应用程序上.有人知道如何解决这个问题吗?



我的java/selenium项目突然出现错误,但元素仍然存在于Web应用程序上。所以我突然得到了一些奇怪的东西。直到今天早上一切都很好。我之前已经执行了 1000 次这些测试,同时前端没有任何更改。

错误示例:

org.openqa.selenium.WebDriver异常:未知错误:未处理 检查器错误:{"代码":-32000,"消息":"找不到上下文 指定的 id"}

org.openqa.selenium.TimeoutException: 预期条件失败: 等待元素的存在,定位于:By.linkText: Betalingsregeling(尝试 10 秒,500 毫秒 间隔(

org.openqa.selenium.StaleElementReferenceException: stale element 参考:元素未附加到页面文档(会话( 信息:铬=77.0.3865.90(

org.openqa.selenium.NoSuchElementException: no suchElement: Impossible to 定位元素: {"方法":"CSS selector","selector":"input[id*='searchCriteria[0]'][class*='col-sm-8']"} (会话信息:铬=77.0.3865.90(

你只需要使用显式或隐式等待。元素在页面上可用,但硒无法访问,因此您必须等到它可以访问。

听起来您的网站发生了变化。在您通常测试的网站上检查 chrome 中带有 F12 的 ID,并确保它们都保持不变。

或者,您可能会遇到典型的"我的应用程序整个周末都在运行,现在周一早上很慢"延迟。如果是这种情况,@Pratik的答案是正确的,但请尝试增加超时,而不是添加硬编码的睡眠。

根据大约一半的错误,我唯一的其他猜测是,您不小心引用了较旧的WebDriver,而不是使用您认为正在使用的WebDriver。

我已经修复了切换到 iframe 后使用一些 Thread.sleep 的问题。不知道为什么切换到 iframe 后和找到元素之前的显式等待失败,我将超时设置为 15 秒,并在每个元素之前构建显式等待。显然,框架内的元素突然没有足够的时间完全加载.....

public static void switchToIFramesOfSearchPage() {
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector(GENERAL_IFRAME_CSS_LOCATOR_VALUE)));
driver.switchTo().frame(SEARCH_PAGE_IFRAME1_ID_LOCATOR_VALUE);
driver.switchTo().frame(SEARCH_PAGE_IFRAME2_ID_LOCATOR_VALUE);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void switchToIFrameOfToolbar() {
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector(GENERAL_IFRAME_CSS_LOCATOR_VALUE)));
driver.switchTo().frame(TOOLBAR_IFRAME_ID_LOCATOR_VALUE);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void switchToIframeOfActivitiesPane(){
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector(GENERAL_IFRAME_CSS_LOCATOR_VALUE)));
driver.switchTo().frame(ACTIVITIES_PANE_IFRAME_ID_LOCATOR_VALUE);
try {
Thread.sleep(750);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void switchToIFrameOfHistoryPane() {
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector(GENERAL_IFRAME_CSS_LOCATOR_VALUE)));
driver.switchTo().frame(HISTORY_PANE_IFRAME_ID_LOCATOR_VALUE);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void switchToIFrameOfImportantView(){
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector(GENERAL_IFRAME_CSS_LOCATOR_VALUE)));
driver.switchTo().frame(IMPORTANT_VIEW_IFRAME_ID_LOCATOR_VALUE);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void switchToIFrameOfAccountView(){
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector(GENERAL_IFRAME_CSS_LOCATOR_VALUE)));
driver.switchTo().frame(ACCOUNT_VIEW_IFRAME_ID_LOCATOR_VALUE);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

相关内容

最新更新