首页 > 解决方案 > 使用量角器在 div 元素上滚动

问题描述

我需要向下滚动一个元素才能单击一个复选框。基本上是我必须接受的用户协议。在我没有滚动到 div 的底部之前,该复选框是不可点击的。这就是我检查复选框的函数的样子:

async privacyStatementEnableCheckbox(){
    await browser.sleep(3000);
    await this.privacyStatementTextContent.click();
    let privacyStatementCheckbox = element(by.xpath(AcceptNewInvitationPage.SELECTORS.privacyStatementCheckbox));
    await browser.actions().mouseMove(this.privacyStatementTextContent).perform();
            await browser.sleep(3000);
            await privacyStatementCheckbox.click();
        }

}

我使用 browser.sleep() 来查看发生了什么,并且显然 div 没有滚动。我得到的错误是:

WebDriverError: element click intercepted: element is not clickable at point xy...另一个元素将被点击

我认为这是因为复选框上有一个“隐藏”元素,直到用户滚动到 div 的底部。

我也试过:

async privacyStatementEnableCheckbox(){
    await browser.sleep(3000);
    await this.privacyStatementTextContent.click();
    let privacyStatementCheckbox = element(by.xpath(AcceptNewInvitationPage.SELECTORS.privacyStatementCheckbox));
    await browser.executeScript('window.scrollTo(0,10000)').then(async function(){
       //check if the checkbox is checked or not
        if(await this.privacyStatementCheckboxValue.getAttribute("data-bv-result") !== "VALID"){
            await browser.sleep(3000);
            await privacyStatementCheckbox.click();
        }
}

我知道这里有很多关于滚动 div 的主题,但我在其中找不到适合我的解决方案。这两个选项都没有为我执行 div 上的滚动,而且我找不到有关 moseMove(element) 如何工作的太多信息。如果有人能指出我做错了什么,我将不胜感激。附加信息:我使用铬、量角器、黄瓜。

标签: google-chromescrollprotractor

解决方案


我知道这与 E2E 测试概念背道而驰。

但是,如果您不打算对此协议和复选框做任何断言,您只需要继续进行实际测试,您可以:

  1. 在您“阅读”协议之前检查复选框
  2. 之后检查它并找出正在更改的属性并使其启用。
  3. 通过使用更改此属性browser.executeScript

推荐阅读