Jump to content

Get IE element by CSSSelector


ur
 Share

Recommended Posts

We can select elements in IE using their IDs as below.

Local $oDiv = _IEGetObjById($oIE, "x-auto-16-input")

But to one button in the webpage, there is no ID to it.

In selenium we have option to select this element using the CssSelector and clicked the button using below code in c# selenium.

driver.FindElement(By.CssSelector("button.x-btn-text")).Click();

What is the alternative for this in AUtoIT?

Link to comment
Share on other sites

Thanks @Danp2

I am able to click the button using a loop for reading the classname of all the buttons in the pages.

Even though it is not selecting the button directly as in Selenium, the current solution is satisfactory.

Func clickButtonWithClass($oIE,$sClass)
      $oFound = ""
      Local $oBtns = _IETagNameGetCollection($oIE, "button")
      For $oBtn In $oBtns
          If String($oBtn.classname) = $sClass Then
           $oFound = $oBtn
         EndIf
      Next
      If IsObj($oFound) Then
         _IEAction ($oFound, "click")
         _IELoadWait ($oIE)
         MsgBox(16, "Success", "Button found with class name: "& $sClass &" and clicked",10)
      Else
         MsgBox(16,"Not found." , "Button not found with class name: "& $sClass,10)
      EndIf
EndFunc

But I am not able to get the page results when I tried from search toolbar on the top of page in this forum.

And also, is there anyway  to use XPath in AutoIT.?

I tried to search some pages but they are looping inside each element tag from body tag onwards, which is not working with below XPath.

driver.FindElement(By.XPath("(//button[@type='button'])[5]")).Click();

Any suggestions?

Link to comment
Share on other sites

Another solution arises once you realize $oIE is an internetexplorer.application object. What does this mean? You can access the page as an object with $oIE.document. This lets you do most things javascript can do with almost the same syntax!

for instance:

; Get all elements in the page by class name
$oElement = $oIE.getElementsByClassName("whatever comes after the = in class=''")
; This returns an array object, so we set $oElement to that object specificly
$oElement = $oTemp(0)
; We can then set it's value or text directly
$oElement.value = 45 ; used mostly for inputs, your milage might vary
$oElement.text = some text ; The text that's between the > and < that people see (usually)
; We can make events, and send them to $oElement to trigger javascript

$oClickEvent = $oIE.document.createEvent('MouseEvents')
;Event types are 'mouseover', 'mousedown', 'mouseup', and 'click'
$oClickEvent.initEvent($action, true, true)
;Now that we have the event, we send it to the control we want
$node.dispatchEvent ($oClickEvent)

;or even other events

$oEvent = $oIE.document.createEvent('Events')
$oEvent.initEvent('submit', true, true)
$node.dispatchEvent ($oEvent)

Once you realize $oIE.document (or any element you get with the other _IE functions are all objects too!) you can start googling java script examples, and by just changing the variables from document or this to $oIE.document or $oElement you can get many of them to work!
 

Edited by corgano

0x616e2069646561206973206c696b652061206d616e20776974686f7574206120626f64792c20746f206669676874206f6e6520697320746f206e657665722077696e2e2e2e2e

Link to comment
Share on other sites

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
 Share

×
×
  • Create New...