开发者社区 问答 正文

选择元素后如何检查元素在视口中是否可用以及使用硒刷新页面(在桌面屏幕中)

问题:选择元素后,页面刷新,元素不可见,修复后,元素可见,页面刷新后不进行任何滚动。这样我可以选择其他选项。

我在下面尝试过,无论视口中是否存在元素(在可见屏幕中)或测试是否通过。我真的很感谢有人可以发布解决方案。

WebElement元素= WebDriverManager.getWebDriver()。findElement(By.id(“ CUSTRATINGS”));

WebDriver driver = ((RemoteWebElement)element).getWrappedDriver();

    return (Boolean)((JavascriptExecutor)driver).executeScript(
            "var elem = arguments[0],                 " +
                    "  box = elem.getBoundingClientRect(),    " +
                    "  cx = box.left + box.width / 2,         " +
                    "  cy = box.top + box.height / 2,         " +
                    "  e = document.elementFromPoint(cx, cy); " +
                    "for (; e; e = e.parentElement) {         " +
                    "  if (e === elem)                        " +
                    "    return true;                         " +
                    "}                                        " +
                    "return false;                            "
            , element);

展开
收起
垚tutu 2019-12-19 15:59:24 537 分享
分享
版权
举报
阿里云 AI 助理回答

根据您的描述,您遇到的问题是在页面刷新后元素可见性改变,并且希望在元素变为可见时能够自动选择其他选项而无需手动滚动。这里有几个可能的解决方案和建议:

  1. 等待元素可见: 使用WebDriverWait结合ExpectedConditions来确保元素变为可见后再执行后续操作。这样可以确保在继续执行脚本之前,页面已经加载完成并且元素是可见的。
WebDriverWait wait = new WebDriverWait(WebDriverManager.getWebDriver(), Duration.ofSeconds(10));
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("CUSTRATINGS")));
  1. 处理页面刷新: 如果页面刷新是预期行为,可以在等待元素可见之后立即进行选择或其他操作。如果刷新导致了WebDriver实例失效,您需要在刷新后重新定位元素。

  2. 避免不必要的滚动: 您当前的JavaScript代码片段用于检查元素是否在视口内,但实际上在使用Selenium时,直接通过ExpectedConditions.visibilityOfElementLocated就已经足够判断元素是否可见,无需额外滚动操作。Selenium会自动处理滚动到元素的操作(如果需要的话)以便于与之交互。

  3. 监听页面变化: 如果页面状态的改变(如元素的出现或消失)是由异步加载或者用户操作触发的,考虑使用事件监听器或者轮询的方式来检测页面状态的变化,而不是依赖于页面刷新后的固定等待时间。

  4. 优化脚本结构: 确保在每次页面刷新后,都从头开始定位元素,不要复用可能已无效的元素引用。

示例代码改进:

// 等待页面刷新并元素变得可见
WebDriverWait wait = new WebDriverWait(WebDriverManager.getWebDriver(), Duration.ofSeconds(10));
WebElement elementAfterRefresh = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("CUSTRATINGS")));

// 执行选择或其他操作
elementAfterRefresh.click(); // 或其他操作,比如 sendKeys() 等

请尝试上述方法看是否能解决您的问题。如果问题依然存在,可能需要更详细地了解页面的具体加载逻辑和您的测试环境配置。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: