gpt4 book ai didi

javascript - scrollIntoViewIfNeeded 脚本不适用于 Protractor

转载 作者:行者123 更新时间:2023-12-04 07:52:07 26 4
gpt4 key购买 nike

我正在使用 Protractor 来开发自动化的网络测试。
有时,我想在单击之前将元素滚动到 View 中(这是有道理的),我使用“scrollIntoView”脚本执行此操作。
当我向下滚动时,这并不总是有效,因为未验证帐户时底部会出现一个横幅,并且它覆盖了元素。
我在浏览器控制台中执行了 elmement.scrollIntoViewIfNeeded(true) ,它就像一个魅力,无论是向上滚动还是向下滚动。
问题是,当我在测试中使用它时,它不起作用。
这是一个代码片段。

         /**
* Scrolls the element into view
* */
async scrollIntoView() {
await browser.executeScript('arguments[0].scrollIntoViewIfNeeded(true)', this.webElement.getWebElement());
}
我还创建了一个名为 Button 的类来表示 DOM 中具有“按钮”标签的元素,这也是代码片段。
/**
* A class that handles actions on buttons.
* */
export class Button extends WebComponent {

/**
* @param webElementText Text that the web element contains.
* @param locatorType Locator type of the web element to search for.
* @param locator Locator of the web element to search for.
* @param parentElement Parent Web Component if it exists.
*/
constructor(webElementText, locatorType, locator, parentElement: WebComponent = null) {
super(webElementText, locatorType, locator, parentElement);
}

/**
* Clicks on the WebElement found
* The click can be done with either JavaScript or with an interaction with the UI.
* @param usingJavaScript {boolean} Boolean to decide whether to use JavaScript for the click or a UI interaction.
*/
async click(usingJavaScript = false) {
if (usingJavaScript) {
await this.isPresent();
await browser.executeScript("arguments[0].click();", await this.webElement.getWebElement());
}

else {
await this.isPresent();
await this.scrollIntoView();
await this.isVisible();
await this.isClickable();
await this.webElement.click();
}
}

}

最佳答案

2个假设为什么这不起作用:

  • 您调用click()没有 await
  • this.webElement.getWebElement() - 定位器有问题

  • 除此之外,一切对我来说都很好。
    如果你不能让它工作,试试我的方法,这对我有用
        /**
    * Scrolls to passed element and then Y pixels down by injecting js scroll() in the context of window
    * @param {ElementFinder} $element Locator of element
    * @param {number} [offsetY=0] Offset by Y axis (how much extra pixels to scroll)
    * @param {number} [sleep=200] wait after scroll to allow scrolling animation to complete
    * @return {Promise}
    */
    scroll: async ($element, offsetY = 0, sleep = 200) => {
    await browser.executeScript(`arguments[0].scrollIntoView({block: "center"});`, $element.getWebElement());
    await browser.sleep(sleep);
    }
    请注意 {block: "center"}使其滚动直到元素位于页面中间,并在页脚/页眉重叠时解决问题

    关于javascript - scrollIntoViewIfNeeded 脚本不适用于 Protractor ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66907775/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com