首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用相同代码的滚动工作7/10次

使用相同代码的滚动工作7/10次
EN

Stack Exchange QA用户
提问于 2022-09-30 13:07:14
回答 2查看 49关注 0票数 0

使用相同的代码,我尝试过滚动,首先滚动到底部,然后是顶部,然后再转到元素,这样就可以正确地加载元素,即使有时由于滚动而导致测试用例失败。

代码语言:javascript
复制
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) {
代码语言:javascript
复制
// TODO Auto-generated method stub
代码语言:javascript
复制
try {
代码语言:javascript
复制
    ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView();", getWebElement(articleSectionStr));
代码语言:javascript
复制
} catch (Exception e) {
代码语言:javascript
复制
    e.printStackTrace();
代码语言:javascript
复制
}
代码语言:javascript
复制
}

公共空scrollToSection(WebElement元素){

代码语言:javascript
复制
    try {
代码语言:javascript
复制
        JavascriptExecutor executor = (JavascriptExecutor) driver;
代码语言:javascript
复制
        int loc = element.getLocation().y;
代码语言:javascript
复制
        executor.executeScript("window.scrollTo(0, " + (loc - 150) + ");");
代码语言:javascript
复制
    } catch (Exception exception) {
代码语言:javascript
复制
        exception.printStackTrace();
代码语言:javascript
复制
    }
代码语言:javascript
复制
}
代码语言:javascript
复制
EN

回答 2

Stack Exchange QA用户

发布于 2022-10-20 13:37:30

自动化脚本通常会遇到这样的问题,当元素出现在页面底部并且找不到时,脚本就会失败。作为软件测试解决方案和自动化经验的一部分,我们遵循下面提到的方法来避免此类故障。

方法:

与直接上下滚动页面不同,您可以先等待页面成功加载,然后滚动窗口并相应地定位元素。这种方法对我们非常有效,并且在滚动窗口后用定位元素解决了这个问题。

这里是python中的代码片段:我们等待页面成功加载,然后滚动整个窗口来定位元素。

代码语言:javascript
复制
def page_has_loaded(self):
    page_state = self.driver.execute_script('return document.readyState;')
    return page_state == 'complete'

一旦网页被成功加载并返回到它的完整状态,我们就可以滚动我们的web元素所在的整个窗口,并且能够很容易地找到它。您可以按照下面的代码片段滚动窗口。

代码语言:javascript
复制
    def scroll_window(self, by_locator):          
          self.driver.execute_script("window.scrollTo(0,document.body.scrollHeight)", by_locator)
票数 0
EN

Stack Exchange QA用户

发布于 2023-03-20 02:38:53

由于所使用的睡眠时间,滚动功能可能会失败。由于页面可能以不同的速度加载,所以最好在尝试滚动到底部、顶部或元素之前等待页面完全加载。

一种解决方案是在滚动之前使用显式等待等待加载元素。例如,在滚动到底部之前,可以在页面底部等待元素的出现。下面是一个示例代码片段:

代码语言:javascript
复制
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更可靠。下面是一个示例代码片段:

代码语言:javascript
复制
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类移动到指定的元素,如果有必要,该元素将滚动页面。这可能是滚动到页面上的元素的一种更可靠的方法。

参考文献:

票数 0
EN
页面原文内容由Stack Exchange QA提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://sqa.stackexchange.com/questions/50577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档