Jump to content

Recommended Posts

Posted (edited)

So I was trying to write a function that can find a button (or any other XPath Element) and scroll the page + move the mouse to the location of the button.
My logic for this was:

1. get position of button using _FFGetPosition
2. get inner dimensions of browser window and total dimensions of page
3. divide total dimensions by inner dimensions to get number of page down operations
4. use Mod() to get remaining pixels offset
5. MouseMove() and add requisite offsets for Titlebar etc (what the +5 and +54 is for in the last line)

Example Code:

_FFConnect($LocalHost, $BrowserPort, $TimeOut)

Local $Button = _FFXPath(".//*[@id='thisbutton']")
Local $ButtonPosition = _FFGetPosition($Button)

Local $ElementWidth = $ButtonPosition[0]
Local $ElementHeight = $ButtonPosition[1]

Local $InnerWidth = _FFCmd("window.content.innerWidth")
Local $InnerHeight = _FFCmd("window.content.innerHeight")

Local $PageWidth = _FFCmd(".body.offsetWidth")
Local $PageHeight = _FFCmd(".body.offsetHeight")

Local $PGDNNo = Int($ElementHeight/$InnerHeight)
Local $PGDNMod = Mod($ElementHeight, $InnerHeight)

; MsgBox(0,"","$ElementX: " & $ElementWidth & @CRLF & "$ElementY: " & $ElementHeight)
; MsgBox(0,"","$InnerWidth: " & $InnerWidth & @CRLF & "$InnerHeight: " & $InnerHeight)
; MsgBox(0,"","$PageWidth: " & $PageWidth & @CRLF & "$PageHeight: " & $PageHeight)
; MsgBox(0,"",$PGDNNo)
; MsgBox(0,"",$PGDNMod)

Local $iter = 1
While $iter <= $PGDNNo
    WinActivate($BrowserWindowClass,"")
    _FFCmd("window.content.scrollByPages(1)")
    $iter += 1
WEnd

MouseMove($ElementWidth + 5, $PGDNMod + 54)

This isn't working. In some cases, it's not doing the page down operation the number of times needed, or not accurately pinpointing the location. I think there may be something wrong with the logic I'm using. What am I doing wrong?

Thanks.

 

Edited by noellarkin
added tags
Posted

UPDATE: I found this command in the Mozilla documentation:
https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView

However, my head's hurting trying to figure out just how I'll be able to package it in AutoIT using FF.au3 :) I'm trying to figure out a way to _FFCmd() my way into this, but the examples given in the documentation use getElementById as an identifier whereas I'm using XPaths (sometimes absolute, sometimes relative), so I'm not sure how the JS would look if I used Xpath to set the element.

Posted
1 hour ago, noellarkin said:

UPDATE: I found this command in the Mozilla documentation:
https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView

_FFConnect($LocalHost, $BrowserPort, $TimeOut)

Func _FFScrollIntoView($element, $elementtype = "id")

    Local $Line1 = '.getElementById("' & $element & '").scrollIntoView()'
    _FFCmd($Line1)

EndFunc

_FFScrollIntoView("yourfieldhere", "id")

I just wrote this. This is working for getElementById, but how might one modify it to take XPath as parameter?

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...