Jump to content

Recommended Posts

Posted (edited)

__WD_Post: URL=HTTP://127.0.0.1:9515/session/5fca837a705f265fecf1b07cf2eccf8e/element/b768902d-f486-4d02-a3c4-7414b9418d79/value; $sData={"id":"b768902d-f486-4d02-a3c4-7414b9418d79", "text":"2021-03-30"}
__WD_Post: StatusCode=200; ResponseText={"value":null}...
_WD_ElementAction: {"value":null}...
__WD_Get: URL=HTTP://127.0.0.1:9515/session/5fca837a705f265fecf1b07cf2eccf8e/element/b768902d-f486-4d02-a3c4-7414b9418d79/property/value
__WD_Get: StatusCode=200; $iResult = 0; $sResponseText={"value":"2021-03-27"}...

$sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//*[@id='compact-header']/div/div/div/div/div[1]/div[1]/input")
Global $result = _DateAdd('D', +3, _NowCalcDate())
$previousdate = ("D:\Xmatters-tempdates\previousdate.txt")
Global $removeslash = StringReplace($result, "/", "-")
FileWrite ($previousdate, $removeslash & @CRLF)
$readfile = FileReadLine ($previousdate,1)

_WD_ElementAction($sSession, $oERect, 'click')
;_WD_SetElementValue($sSession, $sElement, $readfile)
_WD_ElementAction($sSession, $sElement, 'value', $readfile)
_WD_ElementAction($sSession, $sElement, 'property', 'value')

 

The same works fine if iam using IE

$xpathForumLink = ("//*[@id='compact-header']/div/div/div/div/div[1]/div[1]/input")
$aForumLink = BGe_IEGetDOMObjByXPathWithAttributes($oIE1, $xpathForumLink)
Global $result = _DateAdd('D', +3, _NowCalcDate())

_IEAction($aForumLink[0], "focus")
;_IEAction($aForumLink[0], "click")
_IEPropertySet($aForumLink[0], "innertext", $removeslash)
_IELoadWait($oIE1)
Sleep(4000)
_IEAction($aForumLink[0], "click")

 

Edited by Cyborg5000
Posted

A few observations --

  • We can't run the code you posted, so it's difficult to know why it doesn't work as expected
  • You neglected to tell us the website, so we can't investigate further
  • Many websites implement frameworks or javascript libraries that can be difficult to automate.
  • The solution will often involve some library-specific coding.
  • Guessing that you are encountering a similar issue as here.

 

Posted
22 hours ago, Danp2 said:

A few observations --

  • We can't run the code you posted, so it's difficult to know why it doesn't work as expected
  • You neglected to tell us the website, so we can't investigate further
  • Many websites implement frameworks or javascript libraries that can be difficult to automate.
  • The solution will often involve some library-specific coding.
  • Guessing that you are encountering a similar issue as here.

 

Hello @Danp2

Hope you are doing well.

 

This code is the same as you helped with 

 

 

Just trying it to make it work with chrome/wddriver...

Posted (edited)
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=C:\Program Files (x86)\AutoIt3\Icons\MyAutoIt3_Green.ico
#AutoIt3Wrapper_Outfile=XmattersWho'soncall.exe
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <Date.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <File.au3>
#include <IE.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <StringConstants.au3>
#include <FileConstants.au3>
#include <Array.au3>
#include <String.au3>
#include <UIAWrappers.au3>
#include <GuiEdit.au3>
#include <Clipboard.au3>
#include <WinAPI.au3>
#include <ColorConstants.au3>
#include <FontConstants.au3>
#include <ProgressConstants.au3>
#include <Restart.au3>
#include <_IEquerySelectorAll.au3>
#include <GuiRichEdit.au3>
#include <hiddenDesktopInteract.au3>
#include <Date.au3>
#include <CUIAutomation2.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <OutlookEX.au3>
#include <IEbyXPath.au3>
#include <Misc.au3>
#include <MsgBoxConstants.au3>
#include <WinAPIFiles.au3>
#include <Excel.au3>
#include <restart.au3>
#include "wd_core.au3"
#include "wd_helper.au3"
#include <GuiComboBoxEx.au3>
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <WindowsConstants.au3>
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>
#include <WinAPIFiles.au3>

;_SetDate(+3)
;_SetTime(12, 00)

FileDelete("D:\Script-temp\*.*")
FileDelete("C:\Windows\Temp\*.txt")
FileDelete("D:\Xmatters-tempdates\*.*")
FileDelete("D:\Xmatters-Report\*.*")
FileDelete("D:\Rohan-Xmatters-script\LOG\*.*")
;FileDelete("C:\Users\certauto\AppData\Local\Microsoft\Windows\INetCache\*.*")
Global $username = "sling"
Global $pass = "dsfsdgfsg"

Local $sDesiredCapabilities, $sSession
SetupChrome()
_WD_Startup()



$sSession = _WD_CreateSession($sDesiredCapabilities)
_WD_Window ($sSession, "Maximize")
_WD_Navigate($sSession, "https://xyz.okta.com/login/sso_iwa_auth")
_WD_LoadWait($sSession,4000)

_WD_Navigate($sSession, "https://xyz.okta.com/home/xyz_nocalert_1/0oa1ddtojvfGTCooO1d8/aln1ddttkav7HWc4p1d8?fromHome=true")
_WD_LoadWait($sSession,10000)

_WD_Navigate($sSession, "https://xyzit.xmatters.com/xmatters/app.do#WhosOnDutyGroupSelectionPlace:")
_WD_LoadWait($sSession,10000)


$sHnd1 = '{"handle":"' & _WD_Window($sSession, "window") & '"}'
_WD_Attach($sSession, "https://xyzit.xmatters.com/xmatters/app.do#WhosOnDutyGroupSelectionPlace:", "URL")

$sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//input[@class='search-filter']")
_WD_ElementAction($sSession, $sElement,'click')
MouseClick("left")
_WD_ElementAction($sSession, $sElement, 'value', "Xyz Software Inc.")


;=======================================================================================================================
Sleep(4000)
;===============Previous date===================


$sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//*[@id='compact-header']/div/div/div/div/div[1]/div[1]/input")
Global $result = _DateAdd('D', +3, _NowCalcDate())
$previousdate = ("D:\Xmatters-tempdates\previousdate.txt")
Global $removeslash = StringReplace($result, "/", "-")
FileWrite ($previousdate, $removeslash & @CRLF)
$readfile = FileReadLine ($previousdate,1)

_WD_ElementAction($sSession, $sElement, 'value', $removeslash)


Func SetupChrome()
_WD_Option('Driver', 'chromedriver.exe')
_WD_Option('Port', 9515)
_WD_Option('DriverParams', '--verbose --log-path="' & @ScriptDir & '\chrome.log"')

$sDesiredCapabilities = '{"capabilities": {"alwaysMatch": {"goog:chromeOptions": {"w3c": true, "excludeSwitches": [ "enable-automation"], "useAutomationExtension": false, "args":["start-maximized", "disable-infobars","user-data-dir=C://Users//sling//AppData//Local//Google//Chrome//User Data"] }}}}'
EndFunc

Only the thing is that i have to set a date counting 2/3 days ahead, it's run on every Friday selecting date Monday - next Sunday. 

Edited by Cyborg5000
Posted
4 hours ago, Danp2 said:

So, now you should be able to supply a script that anyone can run to observe the outcome

Perhaps I wasn't clear when I made the above statement. My expectation was for you to use the website I posted above for testing this issue.

If you want further assistance, then you need to provide a short reproducer script that we can actually run.

Posted
1 hour ago, Danp2 said:

Perhaps I wasn't clear when I made the above statement. My expectation was for you to use the website I posted above for testing this issue.

If you want further assistance, then you need to provide a short reproducer script that we can actually run.

Hi @Danp2

Thanks, sorry assumed you required what i tried so far... :)

Below is the code modified to work with the test account you had to create cause of me...so thankful to you for supporting and your intentions.

 

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=C:\Program Files (x86)\AutoIt3\Icons\MyAutoIt3_Green.ico
#AutoIt3Wrapper_Outfile=XmattersWho'soncall.exe
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <Date.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <File.au3>
#include <IE.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <StringConstants.au3>
#include <FileConstants.au3>
#include <Array.au3>
#include <String.au3>
#include <UIAWrappers.au3>
#include <GuiEdit.au3>
#include <Clipboard.au3>
#include <WinAPI.au3>
#include <ColorConstants.au3>
#include <FontConstants.au3>
#include <ProgressConstants.au3>
#include <Restart.au3>
#include <_IEquerySelectorAll.au3>
#include <GuiRichEdit.au3>
#include <hiddenDesktopInteract.au3>
#include <Date.au3>
#include <CUIAutomation2.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <OutlookEX.au3>
#include <IEbyXPath.au3>
#include <Misc.au3>
#include <MsgBoxConstants.au3>
#include <WinAPIFiles.au3>
#include <Excel.au3>
#include <restart.au3>
#include "wd_core.au3"
#include "wd_helper.au3"
#include <GuiComboBoxEx.au3>
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <WindowsConstants.au3>
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>
#include <WinAPIFiles.au3>

;_SetDate(+3)
;_SetTime(12, 00)

FileDelete("D:\Script-temp\*.*")
FileDelete("C:\Windows\Temp\*.txt")
FileDelete("D:\Xmatters-tempdates\*.*")
FileDelete("D:\Xmatters-Report\*.*")
FileDelete("D:\Rohan-Xmatters-script\LOG\*.*")
;FileDelete("C:\Users\certauto\AppData\Local\Microsoft\Windows\INetCache\*.*")
Global $username = "Autoit"
Global $pass = "Tester"

Local $sDesiredCapabilities, $sSession
SetupChrome()
_WD_Startup()



$sSession = _WD_CreateSession($sDesiredCapabilities)
_WD_Window ($sSession, "Maximize")
_WD_Navigate($sSession, "https://autoittester.xmatters.com/xmatters/signOn.do")
_WD_LoadWait($sSession,4000)

;=====Insert login details=========
; user name
$sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//*[@id="username"]")
_WD_ElementAction($sSession, $sElement, 'value', $username)

;password
$sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//*[@id="password"]")
_WD_ElementAction($sSession, $sElement, 'value', $pass)


;Submit
$sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//*[@id="submitButton"]")
_WD_ElementAction($sSession, $sElement,'click')
;=====end login info==========


_WD_Navigate($sSession, "https://autoittester.xmatters.com/xmatters/app.do#WhosOnDutyGroupSelectionPlace:")
_WD_LoadWait($sSession,10000)


$sHnd1 = '{"handle":"' & _WD_Window($sSession, "window") & '"}'
_WD_Attach($sSession, "https://autoittester.xmatters.com/xmatters/app.do#WhosOnDutyGroupSelectionPlace:", "URL")

$sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//*[@id="filter-bar"]/div/input")
_WD_ElementAction($sSession, $sElement,'click')
MouseClick("left")
_WD_ElementAction($sSession, $sElement, 'value', "Service-Team")


;=======================================================================================================================
Sleep(4000)
;===============Previous date===================


$sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//*[@id="compact-header"]/div/div/div/div/div[1]/div[1]/input")
Global $result = _DateAdd('D', +3, _NowCalcDate())
$previousdate = ("D:\Xmatters-tempdates\previousdate.txt")
Global $removeslash = StringReplace($result, "/", "-")
FileWrite ($previousdate, $removeslash & @CRLF)
$readfile = FileReadLine ($previousdate,1)

_WD_ElementAction($sSession, $sElement, 'value', $removeslash)


Func SetupChrome()
_WD_Option('Driver', 'chromedriver.exe')
_WD_Option('Port', 9515)
_WD_Option('DriverParams', '--verbose --log-path="' & @ScriptDir & '\chrome.log"')

$sDesiredCapabilities = '{"capabilities": {"alwaysMatch": {"goog:chromeOptions": {"w3c": true, "excludeSwitches": [ "enable-automation"], "useAutomationExtension": false, "args":["start-maximized", "disable-infobars","user-data-dir=C://Users//slingaya//AppData//Local//Google//Chrome//User Data"] }}}}'
EndFunc

 

Posted

That's not exactly a short reproducer. 🤨 I was hoping for something more like this --

#include "wd_core.au3"
#include "wd_helper.au3"

Local $sDesiredCapabilities, $sSession

SetupChrome()
_WD_Startup()
$sSession = _WD_CreateSession($sDesiredCapabilities)

xMatters()
Exit

Func xMatters()
    Local $sUser = 'Autoit', $sPass = 'Tester', $sElement

    _WD_Navigate($sSession, "https://autoittester.xmatters.com/")
    $sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//input[@id='username']")
    _WD_ElementAction($sSession, $sElement, 'value', $sUser)
    $sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//input[@id='password']")
    _WD_ElementAction($sSession, $sElement, 'value', $sPass)
    $sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//button[@id='submitButton']")
    _WD_ElementAction($sSession, $sElement, 'click')
    _WD_LoadWait($sSession, 2000)

    $sElement = _WD_WaitElement($sSession, $_WD_LOCATOR_ByXPath, "//span[@class='UserIntentPrompt-module__cancelBtn--2CSNe']", Default, Default, $_WD_OPTION_Element)
    If @error = $_WD_ERROR_Success Then _WD_ElementAction($sSession, $sElement, 'click')

    $sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//div[@id='GROUPS']")
    _WD_ElementAction($sSession, $sElement, 'click')
    _WD_LinkClickByText($sSession, "Who's On Call", False)
    _WD_LoadWait($sSession, 2000)

    $sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//div[@class='all-groups-check']//div[@class='Checkbox-module__wrapper--1Bxzk']")
    _WD_ElementAction($sSession, $sElement, 'click')

    $sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//div[@class='whos-on-duty-footer']//button[@type='button']")
    _WD_ElementAction($sSession, $sElement, 'click')

    $sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//div[@class='date-time toDate']/div[contains(@class,'date')]/input")
    _WD_ElementAction($sSession, $sElement, 'value', '2021-04-16')

EndFunc

Func SetupChrome()
    _WD_Option('Driver', 'chromedriver.exe')
    _WD_Option('Port', 9515)
    _WD_Option('DriverParams', '--log-path="' & @ScriptDir & '\chrome.log"')

    $sDesiredCapabilities = '{"capabilities": {"alwaysMatch": {"goog:chromeOptions": {"w3c": true, "excludeSwitches": [ "enable-automation"], "useAutomationExtension": false, "prefs": {"credentials_enable_service": false, "profile.password_manager_enabled": false}}}}}'
EndFunc

 

Posted

HI Dan,

 

I tired your code, but setting the date for the 1st frame "date-time fromDate" isn't working.

(Changed loadwait due to slow loading of the page @ my end.)

 

Func xMatters()
    Local $sUser = 'Autoit', $sPass = 'Tester', $sElement

    _WD_Navigate($sSession, "https://autoittester.xmatters.com/")
    $sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//input[@id='username']")
    _WD_ElementAction($sSession, $sElement, 'value', $sUser)
    $sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//input[@id='password']")
    _WD_ElementAction($sSession, $sElement, 'value', $sPass)
    $sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//button[@id='submitButton']")
    _WD_ElementAction($sSession, $sElement, 'click')
    _WD_LoadWait($sSession, 4000)

    $sElement = _WD_WaitElement($sSession, $_WD_LOCATOR_ByXPath, "//span[@class='UserIntentPrompt-module__cancelBtn--2CSNe']", Default, Default)
    If @error = $_WD_ERROR_Success Then _WD_ElementAction($sSession, $sElement, 'click')

    $sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//div[@id='GROUPS']")
    _WD_ElementAction($sSession, $sElement, 'click')
    _WD_LinkClickByText($sSession, "Who's On Call", False)
    _WD_LoadWait($sSession, 4000)


    $sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//div[@class='date-time fromDate']/div[contains(@class,'date')]/input")
    _WD_ElementAction($sSession, $sElement, 'value', '2021-04-14')

 

Posted
6 hours ago, Danp2 said:

I never said that it worked. I was just showing you what I had hoped you had posted as a reproducer. 😒

Go back and reread my previous post, which points you to the javascript code necessary to make this work. I will eventually release an update to the UDF that will make this easier, but you're on your own for now.

HI @Danp2

Greetings of the day! :)

Yup understood your point that i should had created a test account for you or others to reproduce the issue, however dint knew that there can be a free account, since the company had the link integrated xmatters via okta in the apps list...and thought it would be a paid service.

Posted
22 hours ago, Danp2 said:

Good Morning @Cyborg5000 :bye:

I was actually trying to point out that you didn't use the test site once it was available and that your script wasn't a "simple reproducer" because it contained a bunch of code that wasn't necessary to demonstrate the issue. I know that communication can sometimes suffer because of the medium, language barrier, etc. so no worries.

 

Hello @Danp2

Hope you are doing well!,

Yup agree with you over this. Thought it would be good to give and show the tried attempts. :)

Anyways, any pointers for setting the date 🤔 

 

 

Posted

This is working for me. Please test and let me know your experience with it. The existing _WD_SetElementValue function will eventually support this functionality --

$sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//div[@class='date-time toDate']/div[contains(@class,'date')]/input")
    _WD_SetElementValue2($sSession, $sElement, '2021-04-16', 1)
    
Func _WD_SetElementValue2($sSession, $sElement, $sValue, $iStyle = Default)
    Local Const $sFuncName = "_WD_SetElementValue"
    Local $sResult, $iErr, $sScript, $sJsonElement

    If $iStyle = Default Then $iStyle = 0

    Switch $iStyle
        Case 0 ; Standard
            $sResult = _WD_ElementAction($sSession, $sElement, 'value', $sValue)
            $iErr = @error

        Case 1 ; Advanced
            $sScript = "Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, 'value').set.call(arguments[0], arguments[1]);arguments[0].dispatchEvent(new Event('input', { bubbles: true }));"
            $sJsonElement = '{"' & $_WD_ELEMENT_ID & '":"' & $sElement & '"}'
            _WD_ExecuteScript($sSession, $sScript, $sJsonElement & ',"' & $sValue & '"')
            $iErr = @error

    EndSwitch

    Return SetError(__WD_Error($sFuncName, $iErr), 0, $sResult)
EndFunc

 

Posted (edited)
2 hours ago, Danp2 said:

This is working for me. Please test and let me know your experience with it. The existing _WD_SetElementValue function will eventually support this functionality --

$sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//div[@class='date-time toDate']/div[contains(@class,'date')]/input")
    _WD_SetElementValue2($sSession, $sElement, '2021-04-16', 1)
    
Func _WD_SetElementValue2($sSession, $sElement, $sValue, $iStyle = Default)
    Local Const $sFuncName = "_WD_SetElementValue"
    Local $sResult, $iErr, $sScript, $sJsonElement

    If $iStyle = Default Then $iStyle = 0

    Switch $iStyle
        Case 0 ; Standard
            $sResult = _WD_ElementAction($sSession, $sElement, 'value', $sValue)
            $iErr = @error

        Case 1 ; Advanced
            $sScript = "Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, 'value').set.call(arguments[0], arguments[1]);arguments[0].dispatchEvent(new Event('input', { bubbles: true }));"
            $sJsonElement = '{"' & $_WD_ELEMENT_ID & '":"' & $sElement & '"}'
            _WD_ExecuteScript($sSession, $sScript, $sJsonElement & ',"' & $sValue & '"')
            $iErr = @error

    EndSwitch

    Return SetError(__WD_Error($sFuncName, $iErr), 0, $sResult)
EndFunc

 

Hello @Danp2

I wonder how its easier for the MVP's to answer all the calls/questions that arise, Hat's off.✌️👏👍

Since i don't know json/js, it would had taken me no where than to struggle to find this.

 

 

Edited by Cyborg5000

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
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...