无法使用Robot Framework向下滚动网页

问题描述 投票:0回答:10

我正在使用 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)

我该如何解决这个问题?

javascript python-2.7 selenium robotframework
10个回答
4
投票

您的滚动代码看起来不错。但是,我不认为滚动是你的问题。即使元素滚动离开屏幕,元素可见性也正常。例如尝试这段代码。至少在 Chrome 页面上,在输入文本关键字

处向上滚动
*** Settings ***
Library         Selenium2Library

*** Test Cases ***
Scroll
    Open Browser   http://www.stackoverflow.com/    Chrome
    Execute JavaScript    window.scrollTo(0, document.body.scrollHeight)
    Input Text    //*[@id="search"]/input    robot framework
    Sleep    3
    Close All Browsers

我认为您的编辑框定位器可能不正确。


3
投票

我用

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 中指定的元素获取到视口。


1
投票

执行 JavaScript window.scrollTo(1,500) 对我来说适用于 Python2 ;你只需输入 x <> 0 例如 '1' 否则它不会'滚动


0
投票

您可以使用它作为关键字:

Execute Javascript    $(document).scrollTop(${x})

哪里,

x 是向下滚动的数字(以毫秒为单位)。


0
投票

您是否直接在 IPython 控制台中尝试过 Selenium webdriver?

我已经尝试过如下,并且可以向下滚动。

from selenium import webdriver
firefox = webdriver.Firefox()
firefox.get('http://twitter.com')
firefox.execute_script('window.scrollTo(0,200)')

0
投票

如果您的页面中有另一个带有滚动条的元素您想要滚动到其中,您可以使用此执行javascript命令:

Execute Javascript   document.querySelector('<div.css>').scrollTop = 200;

您可以更改“200”并在您想要向下滚动更多时增加它。


0
投票

我尝试按 Tab 多次,直到找到我的元素..!

FOR    ${i}    IN RANGE    ${Range}
    Press Keys    NONE    TAB 
END 

0
投票

我刚刚按 TAB 键所需的次数结束,选择一个元素并按 TAB 键

Click Element    ${Element}   
FOR    ${i}    IN RANGE    ${Range}// you can even provide number 
    Press Keys    NONE    TAB 
END 

0
投票

我尝试过以下对我有用的方法

填写所需信息

input text      id:userName         Joe Biden
input text      id:userEmail        [email protected]
input text      id:currentAddress   211 Madison Ave NY
execute javascript  window.scrollTo(0,200)
scroll element into view         id:submit

您需要在滚动之前选择窗口


0
投票

您可以使用以下。

Execute JavaScript    window.scrollTo(0,document.body.scrollHeight)
© www.soinside.com 2019 - 2024. All rights reserved.