使用相同的代码,我尝试过滚动,首先滚动到底部,然后是顶部,然后再转到元素,这样就可以正确地加载元素,即使有时由于滚动而导致测试用例失败。
public void pageScroller() {
try {
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("window.scrollTo(0, document.body.scrollHeight)");
Thread.sleep(2000);
executor.executeScript("window.scrollTo(0, 0)");
Thread.sleep(2000);
}
catch(Exception e) {
test.log(Status.FAIL, e);
}
}```
//Tried below two functions for scrolling
```private void scrollToElement(WebElement articleSection2) {// TODO Auto-generated method stubtry { ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView();", getWebElement(articleSectionStr));} catch (Exception e) { e.printStackTrace();}}公共空scrollToSection(WebElement元素){
try { JavascriptExecutor executor = (JavascriptExecutor) driver; int loc = element.getLocation().y; executor.executeScript("window.scrollTo(0, " + (loc - 150) + ");"); } catch (Exception exception) { exception.printStackTrace(); }}发布于 2022-10-20 13:37:30
自动化脚本通常会遇到这样的问题,当元素出现在页面底部并且找不到时,脚本就会失败。作为软件测试解决方案和自动化经验的一部分,我们遵循下面提到的方法来避免此类故障。
与直接上下滚动页面不同,您可以先等待页面成功加载,然后滚动窗口并相应地定位元素。这种方法对我们非常有效,并且在滚动窗口后用定位元素解决了这个问题。
这里是python中的代码片段:我们等待页面成功加载,然后滚动整个窗口来定位元素。
def page_has_loaded(self):
page_state = self.driver.execute_script('return document.readyState;')
return page_state == 'complete'一旦网页被成功加载并返回到它的完整状态,我们就可以滚动我们的web元素所在的整个窗口,并且能够很容易地找到它。您可以按照下面的代码片段滚动窗口。
def scroll_window(self, by_locator):
self.driver.execute_script("window.scrollTo(0,document.body.scrollHeight)", by_locator)发布于 2023-03-20 02:38:53
由于所使用的睡眠时间,滚动功能可能会失败。由于页面可能以不同的速度加载,所以最好在尝试滚动到底部、顶部或元素之前等待页面完全加载。
一种解决方案是在滚动之前使用显式等待等待加载元素。例如,在滚动到底部之前,可以在页面底部等待元素的出现。下面是一个示例代码片段:
public void scrollToBottom() {
try {
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//footer")));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("window.scrollTo(0, document.body.scrollHeight)");
}
catch(Exception e) {
test.log(Status.FAIL, e);
}
}在本例中,我们使用显式等待等待页脚元素出现在页面上,然后滚动到底部。您也可以在滚动之前等待其他元素出现。
此外,您还可以使用Selenium中的Actions类滚动到元素,这可能比使用JavascriptExecutor更可靠。下面是一个示例代码片段:
public void scrollToElement(WebElement element) {
try {
Actions actions = new Actions(driver);
actions.moveToElement(element);
actions.perform();
} catch (Exception exception) {
test.log(Status.FAIL, exception);
}
}此代码使用Actions类移动到指定的元素,如果有必要,该元素将滚动页面。这可能是滚动到页面上的元素的一种更可靠的方法。
参考文献:
https://sqa.stackexchange.com/questions/50577
复制相似问题