Jump to content

Recommended Posts

  • Moderators
Posted

NassauSky,

Look in the Help file under <Using AutoIt - Running Scripts - AutoIt specific command Line Switches> and all will be revealed

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

  Reveal hidden contents

 

Posted

Hmmm thanks @Melba23 that reference you provided looks like I'm calling a separate interpreter instance to run the code. This might not be  workable in my situation.  My case involves my existing script:

1) Creating a Webdriver session which opens a Chrome session

;Example Script
$aChrome = _StartChrome()
_WD_Navigate($sSession, 'https://www.google.com')
_WD_LoadWait($sSession, 2000)

2) Having it dynamically run some code in a variable while still having control of the same session.

;----String That Is In A Variable
$sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//input[@name='q']")
_WD_ElementAction($sSession, $sElement, 'value', 'Autoit')

If I run another instance of the interpreter, I don't think it will attach to the same running chrome session to complete the commands I started in my main script session.

 

Make sense?

I apologize if in the Autoit help reference I searched, it didn't seem like it applies to this case. I have been wrong many times and can be wrong again.

  • Moderators
Posted

NassauSky,

Why would you be calling a separate interpreter? Your script is running in an interpreter and that is the same interpreter which is called to execute the line. If you compile the script (and compile it with the #pragma compile(AutoItExecuteAllowed, True) directive then the compiled script itself runs the additional line.

I have no experience of the Webdriver code, but if all the lines are in the same script I see no reason why it will not work.

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

  Reveal hidden contents

 

Posted (edited)

Maybe something like this ?

#include <Constants.au3>
#include "wd_core.au3"
#include "wd_helper.au3"

;$_WD_DEBUG = $_WD_DEBUG_None ; to hide ChromeDriver console

Local $sDesiredCapabilities = SetupChrome()
_WD_Startup()
Sleep(2000)
_WD_ConsoleVisible()
Local $sSession = _WD_CreateSession($sDesiredCapabilities)

Const $Line1 = '_WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//a[@class=''gb_g'']")'
Const $Line2 = "_WD_ElementAction($sSession, $sElement, 'text')"

_WD_Navigate($sSession, "http://google.ca")
Local $sElement = Execute($Line1)
ConsoleWrite ("$sElement = " & $sElement & @CRLF)
Local $sText = Execute ($Line2)
ConsoleWrite ("$sText = " & $sText & @CRLF)
Sleep(6000)

_WD_DeleteSession($sSession)
_WD_Shutdown()

Func SetupChrome()
  _WD_Option('Driver', 'chromedriver.exe')
  _WD_Option('Port', 9515)
  _WD_Option('DriverParams', '--verbose --log-path="' & @ScriptDir & '\chrome.log"')
  Return '{"capabilities": {"alwaysMatch": {"goog:chromeOptions": {"w3c": true, "excludeSwitches": [ "enable-automation"], "useAutomationExtension": false }}}}'
EndFunc   ;==>SetupChrome

 

Edited by Nine
Posted (edited)

 

Untested but I've written similar stuff b4 that has worked just fine. Not exactly sure what the final intent is but you could always use a string split to spit out the parameters if they're in one string.   As far as the function.... a string that is the function name is probably not going to work the same as the function pointer.

$msgbx=MsgBox
    
    a($msgbx,0,"notice","test") 
    
    Func a($func,$p1,$p2,$p3) 
    
    $func($p1,$p2,$p3) 
    
    Endfunc

Or you could use a map[]

$fmap["MsgBox"]=MsgBox 
    
    $s="MsgBox(0,'notice','test')"
    
    $fsplit=stringsplit($s,"(")
    
    $psplit=stringsplit($fsplit[2],",")
    
    $psplit[3]=Stringtrimright($psplit[3],1)
    
    $fmap[$fsplit[1]]($psplit[1],$psplit[2],$psplit[3])

idk, untested.   In my mind it works 

As a disclaimer be careful with maps bc last I checked they weren't compatible with some versions of autoit. 

 

 

 

 

Edited by markyrocks
Posted
  On 11/20/2020 at 4:45 PM, NassauSky said:

I have code saved in a string. For example:

$runMe =  'MsgBox(0,"Notice","Test")'

Can I run this upon clicking a button.

I tried using a button RUN calling a function:

Func RunCode()
    Execute($runMe)
EndFunc

No luck.

Expand  

The code that you posted works perfectly, assuming the function gets called, for example:

RunCode()

Unfortunately, you didn’t post the code where it gets called.

So it’s impossible to say why you had “no luck”.

Code hard, but don’t hard code...

Posted (edited)

How can everyone be so right in one post.  Yes @JockoDundee I apologize, I should have said that worked fine. My problem was that I had an edit box that I was trying to execute from. Once I stripped out the extra CRLF it functioned correctly:

   $execCode = StringStripCR ( GUICtrlRead($XpathEditCode) )
   MsgBox($MB_TOPMOST, "Notice", "Executing code:" & @CRLF & $execCode)
   Execute($execCode)

@Nine that was "Exactly" what I was looking for. I had that setup  integrated into my large program and couldn't simplify it any more than you did. 
 

Edited by NassauSky
Posted

@markyrocks When you post your small snippet of code, please use code tags:

 

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

  Reveal hidden contents

Signature last update: 2023-04-24

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...