Selenium webdriver 向下滚动“条款和条件”文本框,然后单击“同意”

Selenium webdriver 向下滚动“条款和条件”文本框,然后单击“同意”,selenium-webdriver,protractor,Selenium Webdriver,Protractor,我正在做量角器测试。最近我的网页发生了变化,条款和条件在文本框中。只有当用户滚动文本框并单击“同意”按钮时,“提交”按钮才起作用。我尝试了以下选项向下滚动,但没有向下滚动。非常感谢您的帮助 var scrollbar = element(by.id('terms-conditions')); var checkbox = element(by.id('checkbox')); scrollbar.click() browser.executeScript('arguments[0].scro

我正在做量角器测试。最近我的网页发生了变化,条款和条件在文本框中。只有当用户滚动文本框并单击“同意”按钮时,“提交”按钮才起作用。我尝试了以下选项向下滚动,但没有向下滚动。非常感谢您的帮助

var scrollbar = element(by.id('terms-conditions'));
var checkbox = element(by.id('checkbox'));

scrollbar.click()

browser.executeScript('arguments[0].scrollIntoView()', scrollbar.getWebElement());
browser.executeScript('window.scrollTo(0,670);')
checkbox.click();
我也按照下面的链接,但没有运气


浏览器。executeScript
是一个异步调用,因此您需要将其放入
控制流中,以便在单击复选框之前完成:

scrollbar.click();
browser.controlFlow().execute(function() {
    browser.executeScript('arguments[0].scrollIntoView()', scrollbar.getWebElement());
    browser.executeScript('window.scrollTo(0,670);');
});
checkbox.click();

browser.executeScript
是一个异步调用,因此需要将其放入
controlFlow
中,以便在单击复选框之前完成:

scrollbar.click();
browser.controlFlow().execute(function() {
    browser.executeScript('arguments[0].scrollIntoView()', scrollbar.getWebElement());
    browser.executeScript('window.scrollTo(0,670);');
});
checkbox.click();

您正在使用的第二个js execute语句包含
Window.scrollTo
,它引用浏览器中打开的窗口。使用它只会滚动整个窗口,而不会滚动浏览器窗口中出现的弹出窗口 请参阅
窗口上的文档。滚动至

通常情况下,条款和条件会显示在弹出窗口中,或者可能是一个div,因此
窗口。scrollTo
不起作用

有两种方法可以做到这一点

解决方案1:使用Jquery scrollTop()在特定webElement内滚动

步骤1:确定保存服务条款滚动条的确切div

步骤2:通过直接在Chrome控制台中尝试来优化js语句

$('.modal body').scrollTop()
->返回滚动条的当前位置
$('.modal body')。scrollTop(10000)
->此设置top position的值

第3步:将其合并到量角器脚本中

browser.executeScript('$('.modal-body').scrollTop(10000)');
您可以通过将元素和滚动量作为参数传递来实现专业化。提及

解决方案2;提交弹出窗口的最佳方式不是处理界面,而是处理其背后的“表单”元素。类似于我们处理文件上传的方式。没有麻烦&有效


您可以尝试这样做,首先使按钮可见,然后提交表单。您使用的第二个js execute语句包含
窗口。滚动到
,它引用浏览器中打开的窗口。使用它只会滚动整个窗口,而不会滚动浏览器窗口中出现的弹出窗口
请参阅
窗口上的文档。滚动至

通常情况下,条款和条件会显示在弹出窗口中,或者可能是一个div,因此
窗口。scrollTo
不起作用

有两种方法可以做到这一点

解决方案1:使用Jquery scrollTop()在特定webElement内滚动

步骤1:确定保存服务条款滚动条的确切div

步骤2:通过直接在Chrome控制台中尝试来优化js语句

$('.modal body').scrollTop()
->返回滚动条的当前位置
$('.modal body')。scrollTop(10000)
->此设置top position的值

第3步:将其合并到量角器脚本中

browser.executeScript('$('.modal-body').scrollTop(10000)');
您可以通过将元素和滚动量作为参数传递来实现专业化。提及

解决方案2;提交弹出窗口的最佳方式不是处理界面,而是处理其背后的“表单”元素。类似于我们处理文件上传的方式。没有麻烦&有效


可以尝试类似的方法,首先使按钮可见,然后提交表单

您应该尝试访问复选框元素,然后单击as
browser.executeScript('arguments[0].scrollIntoView(),复选框);复选框。单击()您应该尝试访问复选框元素,然后单击as
browser.executeScript('arguments[0].scrollIntoView()',复选框);复选框。单击()文本框滚动条仍然没有向下滚动:(文本框滚动条仍然没有向下滚动:(