无法使用机器人框架向下滚动网页
Posted
技术标签:
【中文标题】无法使用机器人框架向下滚动网页【英文标题】:Unable to scroll down the web page using the Robot Framework 【发布时间】:2015-11-04 00:57:32 【问题描述】:我正在使用 Selenium 2 和 Robot Framework 来自动化我们的应用程序。我已使用以下 javascript 代码向下滚动页面,但无法滚动。
我想在向下滚动后在文本框中输入文本,但收到异常:
元素不可见
默认情况下,文本框在屏幕上是部分可见的,如果我们手动向下滚动而不是完全可见,但是 selenium 机器人框架无法向下滚动。
我试过了:
Execute JavaScript window.scrollTo(0,200)
Execute JavaScript window.scrollBy(0,200)
Execute JavaScript window.scrollTo(0, document.body.scrollHeight)
我该如何解决这个问题?
【问题讨论】:
在尝试滚动之前尝试选择窗口,selenium.selectWindow("id=theWindowID"); 尝试使用“焦点”关键字!它对我有帮助! 【参考方案1】:您的滚动代码看起来不错。但是,我不认为滚动是你的问题。元素可见性是好的,即使它从屏幕上滚动出来。例如,试试这个代码。至少在 Chrome 页面在 Input Text 关键字处向上滚动
*** Settings ***
Library Selenium2Library
*** Test Cases ***
Scroll
Open Browser http://www.***.com/ Chrome
Execute JavaScript window.scrollTo(0, document.body.scrollHeight)
Input Text //*[@id="search"]/input robot framework
Sleep 3
Close All Browsers
我认为您的编辑框的定位器可能不正确。
【讨论】:
【参考方案2】:我用Execute JavaScript $element.scrollby(0,200)
解决了这个问题。它不会在所有情况下都有效。如果元素不在视口中,它将不会滚动。
有一种有效的方法可以滚动页面以将元素移至视口。
如果我们使用Execute JavaScript Window.scroll(x,y)
,我们需要指定一个水平和垂直位置,x,y,这很难找到并且可能不准确。
相反,我们可以使用以下代码行,
Execute JavaScript window.document.evaluate("//xpathlocation", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.scrollIntoView(true);
以上代码将滚动窗口并将/xpathlocation中指定的元素获取到视口。
【讨论】:
我怎样才能得到它的返回值【参考方案3】:您可以将其用作关键字:
Execute Javascript $(document).scrollTop($x)
在哪里,
x 是向下滚动的毫秒数。
【讨论】:
毫秒秒?这不是毫秒。您还应该提到scrollTop()
是一个 jQuery 函数。【参考方案4】:
你有没有在 IPython 控制台中直接在 Selenium webdriver 中尝试过?
我已经尝试如下,它可以向下滚动。
from selenium import webdriver
firefox = webdriver.Firefox()
firefox.get('http://twitter.com')
firefox.execute_script('window.scrollTo(0,200)')
【讨论】:
【参考方案5】:如果您的页面中有另一个带有滚动条的元素要滚动到,您可以使用这个 Execute javascript 命令:
Execute Javascript document.querySelector('<div.css>').scrollTop = 200;
您可以更改“200”并根据需要向下滚动更多。
【讨论】:
以上是关于无法使用机器人框架向下滚动网页的主要内容,如果未能解决你的问题,请参考以下文章
UIScrollView - 无法向下滚动很远(即使我已将 contentsize 设置为 1000)[重复]
React Native Expo - 无法向下滚动以获取更多内容