使用量角器在 div 元素上滚动

Scrolling on a div element with protractor

我需要向下滚动元素才能单击复选框。基本上是我必须接受的用户协议。在我没有滚动到 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... another element would bew clicked instead

我认为这是因为复选框上有一个 "hider" 元素,直到用户滚动到 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) 如何工作的更多信息。 如果有人能指出我做错了什么,我将不胜感激。 附加信息:我正在使用 chrome、量角器、黄瓜。

我知道这违背了 E2E 测试理念。

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

  1. 在 'read' 同意
  2. 之前勾选复选框
  3. 之后检查它并找出 属性 正在更改并启用它的内容。
  4. 使用 browser.executeScript
  5. 更改此 属性

我最终解决了让量角器按下结束按钮的问题

await this.privacyStatementTextContent.click();
    await browser.actions().sendKeys(protractor.Key.END).perform();
    await browser.sleep(1000);
    await privacyStatementCheckbox.click();