使用量角器在 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 测试理念。
但是如果你不打算对这个协议和复选框做任何断言,你只需要继续进行实际测试,你可以:
- 在 'read' 同意
之前勾选复选框
- 之后检查它并找出 属性 正在更改并启用它的内容。
- 使用
browser.executeScript
更改此 属性
我最终解决了让量角器按下结束按钮的问题
await this.privacyStatementTextContent.click();
await browser.actions().sendKeys(protractor.Key.END).perform();
await browser.sleep(1000);
await privacyStatementCheckbox.click();
我需要向下滚动元素才能单击复选框。基本上是我必须接受的用户协议。在我没有滚动到 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 测试理念。
但是如果你不打算对这个协议和复选框做任何断言,你只需要继续进行实际测试,你可以:
- 在 'read' 同意 之前勾选复选框
- 之后检查它并找出 属性 正在更改并启用它的内容。
- 使用
browser.executeScript
更改此 属性
我最终解决了让量角器按下结束按钮的问题
await this.privacyStatementTextContent.click();
await browser.actions().sendKeys(protractor.Key.END).perform();
await browser.sleep(1000);
await privacyStatementCheckbox.click();