Jump to content

Recommended Posts

Posted (edited)

I think this maybe a bug but I am posting  just to check before adding it on to the bug tracker.

As an example I have used a script from the help file and modded to create the error.

#include <IE.au3>

Local $oIE = _IE_Example("form")
Local $oForm = _IEFormGetObjByName($oIE, "ExampleForm")
Local $oSelect = _IEFormElementGetObjByName($oForm, "selectExample")

_IEAction($oSelect, "focus")

For $i = 1 To 1
    _IEFormElementOptionSelect($oSelect, "Im Missing", 1, "byText")
    if @error then MsgBox(0,'Error', 'DOH')
    Sleep(1000)
    _IEFormElementOptionSelect($oSelect, "midipage.html", 1, "byValue")
    Sleep(1000)
    _IEFormElementOptionSelect($oSelect, 0, 1, "byIndex")
    Sleep(1000)
Next

_IEQuit($oIE)

Even though "Im Missing" isn't in the drop down list there is no error created. Looking at the ie.au3 and the func IEFormElementOptionSelect  I think the following lines should be moved out of the For $oItem In $oItems loop to throw out the error.

__IEConsoleWriteError("Warning", "_IEFormElementOptionSelect", "$_IESTATUS_NoMatch", "Text not matched")
Return SetError($_IESTATUS_NoMatch, 2, 0)

If I alter the udf by moving the lines the error is raised if the option is not in the drop down list. I have tried it with the latest beta and as the function is the same so is the outcome.

Edited by benners
update
Posted

I believe that you are right. In both switch cases "byValue" and "byText" the error "... not matched" should be out the for loop.

I dont know how you should proceed, maybe a user/mvp/mod can instruct you how to check/report this issue.

Posted

As to your track ticket, please look at this mod, can you test it ?

;~ https://www.autoitscript.com/trac/autoit/ticket/3239

#include <IE.au3>

Local $oIE = _IE_Example("form")
Local $oForm = _IEFormGetObjByName($oIE, "ExampleForm")
Local $oSelect = _IEFormElementGetObjByName($oForm, "selectExample")

_IEAction($oSelect, "focus")

For $i = 1 To 1
    _IEFormElementOptionSelect_Mod($oSelect, "Im Missing", 1, "byText")
    if @error then MsgBox(0,'Error', 'DOH')
    Sleep(1000)
    _IEFormElementOptionSelect_Mod($oSelect, "midipage.html", 1, "byValue")
    Sleep(1000)
    _IEFormElementOptionSelect_Mod($oSelect, 0, 1, "byIndex")
    Sleep(1000)
Next

;~ _IEQuit($oIE)

Func _IEFormElementOptionSelect_Mod(ByRef $oObject, $sString, $iSelect = 1, $sMode = "byValue", $iFireEvent = 1)
    If Not IsObj($oObject) Then
        __IEConsoleWriteError("Error", "_IEFormElementOptionSelect_Mod", "$_IESTATUS_InvalidDataType")
        Return SetError($_IESTATUS_InvalidDataType, 1, 0)
    EndIf
    ;
    If Not __IEIsObjType($oObject, "formselectelement") Then
        __IEConsoleWriteError("Error", "_IEFormElementOptionSelect_Mod", "$_IESTATUS_InvalidObjectType")
        Return SetError($_IESTATUS_InvalidObjectType, 1, 0)
    EndIf
    ;
    Local $oItem, $oItems = $oObject.options, $iNumItems = $oObject.options.length, $bIsMultiple = $oObject.multiple

    Switch $sMode
        Case "byValue"
            For $oItem In $oItems
                If $oItem.value = $sString Then
                    Switch $iSelect
                        Case -1
                            Return SetError($_IESTATUS_Success, 0, $oItem.selected)
                        Case 0
                            If Not $bIsMultiple Then
                                __IEConsoleWriteError("Error", "_IEFormElementOptionSelect_Mod", "$_IESTATUS_InvalidValue", _
                                        "$iSelect=0 only valid for type=select multiple")
                                SetError($_IESTATUS_InvalidValue, 3)
                            EndIf
                            If $oItem.selected Then
                                $oItem.selected = False
                                If $iFireEvent Then
                                    $oObject.fireEvent("onChange")
                                    $oObject.fireEvent("OnClick")
                                EndIf
                            EndIf
                            Return SetError($_IESTATUS_Success, 0, 1)
                        Case 1
                            If Not $oItem.selected Then
                                $oItem.selected = True
                                If $iFireEvent Then
                                    $oObject.fireEvent("onChange")
                                    $oObject.fireEvent("OnClick")
                                EndIf
                            EndIf
                            Return SetError($_IESTATUS_Success, 0, 1)
                        Case Else
                            __IEConsoleWriteError("Error", "_IEFormElementOptionSelect_Mod", "$_IESTATUS_InvalidValue", "Invalid $iSelect value")
                            Return SetError($_IESTATUS_InvalidValue, 3, 0)
                    EndSwitch
                EndIf
            Next
            __IEConsoleWriteError("Warning", "_IEFormElementOptionSelect_Mod", "$_IESTATUS_NoMatch", "Value not matched")
            Return SetError($_IESTATUS_NoMatch, 2, 0)
        Case "byText"
            For $oItem In $oItems
                If String($oItem.text) = $sString Then
                    Switch $iSelect
                        Case -1
                            Return SetError($_IESTATUS_Success, 0, $oItem.selected)
                        Case 0
                            If Not $bIsMultiple Then
                                __IEConsoleWriteError("Error", "_IEFormElementOptionSelect_Mod", "$_IESTATUS_InvalidValue", _
                                        "$iSelect=0 only valid for type=select multiple")
                                SetError($_IESTATUS_InvalidValue, 3)
                            EndIf
                            If $oItem.selected Then
                                $oItem.selected = False
                                If $iFireEvent Then
                                    $oObject.fireEvent("onChange")
                                    $oObject.fireEvent("OnClick")
                                EndIf
                            EndIf
                            Return SetError($_IESTATUS_Success, 0, 1)
                        Case 1
                            If Not $oItem.selected Then
                                $oItem.selected = True
                                If $iFireEvent Then
                                    $oObject.fireEvent("onChange")
                                    $oObject.fireEvent("OnClick")
                                EndIf
                            EndIf
                            Return SetError($_IESTATUS_Success, 0, 1)
                        Case Else
                            __IEConsoleWriteError("Error", "_IEFormElementOptionSelect_Mod", "$_IESTATUS_InvalidValue", "Invalid $iSelect value")
                            Return SetError($_IESTATUS_InvalidValue, 3, 0)
                    EndSwitch
                EndIf
            Next
            __IEConsoleWriteError("Warning", "_IEFormElementOptionSelect_Mod", "$_IESTATUS_NoMatch", "Text not matched")
            Return SetError($_IESTATUS_NoMatch, 2, 0)
        Case "byIndex"
            Local $iIndex = Number($sString)
            If $iIndex < 0 Or $iIndex >= $iNumItems Then
                __IEConsoleWriteError("Error", "_IEFormElementOptionSelect_Mod", "$_IESTATUS_InvalidValue", "Invalid index value, " & $iIndex)
                Return SetError($_IESTATUS_InvalidValue, 2, 0)
            EndIf
            $oItem = $oItems.item($iIndex)
            Switch $iSelect
                Case -1
                    Return SetError($_IESTATUS_Success, 0, $oItems.item($iIndex).selected)
                Case 0
                    If Not $bIsMultiple Then
                        __IEConsoleWriteError("Error", "_IEFormElementOptionSelect_Mod", "$_IESTATUS_InvalidValue", _
                                "$iSelect=0 only valid for type=select multiple")
                        SetError($_IESTATUS_InvalidValue, 3)
                    EndIf
                    If $oItem.selected Then
                        $oItems.item($iIndex).selected = False
                        If $iFireEvent Then
                            $oObject.fireEvent("onChange")
                            $oObject.fireEvent("OnClick")
                        EndIf
                    EndIf
                    Return SetError($_IESTATUS_Success, 0, 1)
                Case 1
                    If Not $oItem.selected Then
                        $oItems.item($iIndex).selected = True
                        If $iFireEvent Then
                            $oObject.fireEvent("onChange")
                            $oObject.fireEvent("OnClick")
                        EndIf
                    EndIf
                    Return SetError($_IESTATUS_Success, 0, 1)
                Case Else
                    __IEConsoleWriteError("Error", "_IEFormElementOptionSelect_Mod", "$_IESTATUS_InvalidValue", "Invalid $iSelect value")
                    Return SetError($_IESTATUS_InvalidValue, 3, 0)
            EndSwitch
        Case Else
            __IEConsoleWriteError("Error", "_IEFormElementOptionSelect_Mod", "$_IESTATUS_InvalidValue", "Invalid Mode")
            Return SetError($_IESTATUS_InvalidValue, 4, 0)
    EndSwitch
EndFunc   ;==>_IEFormElementOptionSelect_Mod

 

 

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

Posted

Yep, that is what I eventually ended up doing. I noticed another potential issue but haven't had time to test. With the switch statement for $iSelect on the three $sMode cases. Case 0 should be altered by adding a Return to the line below or now an incorrect error will be reported and an incorrect @extended parameter number

SetError($_IESTATUS_InvalidValue, 3)

to

Return SetError($_IESTATUS_InvalidValue, 3)

Cheers for the input

Posted

You have right about the Return SetError.....
Will be also fixed .

 

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