问题:选择元素后,页面刷新,元素不可见,修复后,元素可见,页面刷新后不进行任何滚动。这样我可以选择其他选项。
我在下面尝试过,无论视口中是否存在元素(在可见屏幕中)或测试是否通过。我真的很感谢有人可以发布解决方案。
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);
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您的描述,您遇到的问题是在页面刷新后元素可见性改变,并且希望在元素变为可见时能够自动选择其他选项而无需手动滚动。这里有几个可能的解决方案和建议:
WebDriverWait wait = new WebDriverWait(WebDriverManager.getWebDriver(), Duration.ofSeconds(10));
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("CUSTRATINGS")));
处理页面刷新: 如果页面刷新是预期行为,可以在等待元素可见之后立即进行选择或其他操作。如果刷新导致了WebDriver实例失效,您需要在刷新后重新定位元素。
避免不必要的滚动: 您当前的JavaScript代码片段用于检查元素是否在视口内,但实际上在使用Selenium时,直接通过ExpectedConditions.visibilityOfElementLocated
就已经足够判断元素是否可见,无需额外滚动操作。Selenium会自动处理滚动到元素的操作(如果需要的话)以便于与之交互。
监听页面变化: 如果页面状态的改变(如元素的出现或消失)是由异步加载或者用户操作触发的,考虑使用事件监听器或者轮询的方式来检测页面状态的变化,而不是依赖于页面刷新后的固定等待时间。
优化脚本结构: 确保在每次页面刷新后,都从头开始定位元素,不要复用可能已无效的元素引用。
示例代码改进:
// 等待页面刷新并元素变得可见
WebDriverWait wait = new WebDriverWait(WebDriverManager.getWebDriver(), Duration.ofSeconds(10));
WebElement elementAfterRefresh = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("CUSTRATINGS")));
// 执行选择或其他操作
elementAfterRefresh.click(); // 或其他操作,比如 sendKeys() 等
请尝试上述方法看是否能解决您的问题。如果问题依然存在,可能需要更详细地了解页面的具体加载逻辑和您的测试环境配置。