Sto usando l'operatore in background per manipolare alcuni elementi sul mio web browser usando vb.net.Verificare se l'elemento esiste in WebBrowser utilizzando BackgroundWorker
Ad esempio, l'operatore in background RFIDReader
verificherà se sono su un collegamento specifico.
ElseIf TerminalBrowser.Url.ToString.Contains(baseUrl + "box-office/ticket-verification") And rf_code <> "" Then
' Insert RF Code in "rf_code" hidden text field
Me.Invoke(Sub() Me.TerminalBrowser.Document.GetElementById("rf_code").SetAttribute("value", rf_code.ToLower))
End If
Quello che succede qui è se tocchio la mia carta RFID. Comprenderà il valore corrispondente al mio elemento rf_code
nel mio browser.
Ora quello che voglio succedere è, voglio controllare se il contenitore stesso (synchronize-rfid
) esiste (visto che è un pop up). Vedi l'immagine per riferimento.
Ecco il nostro codice per questo.
If Me.TerminalBrowser.Document.GetElementById("synchronize-rfid") IsNot Nothing Then
' Code here
end if
Riferimento: https://stackoverflow.com/a/2022120/1699388
Il problema è, BackgroundWorker non interagisce realmente con UI secondo il codice di cui sopra.
Esiste un metodo per determinare se quell'elemento esiste utilizzando l'operatore in background?
Penso di averlo fatto e non funziona comunque.
Dim synchronize_rfid = Me.Invoke(Sub() Me.TerminalBrowser.Document.GetElementById("synchronize-rfid"))
If synchronize_rfid IsNot Nothing Then
' Code here
end if
Che cosa significa "non funziona se" significa? eccezione generata, non il risultato che ti aspetti, ecc.? – TnTinMn
@TnTinMn, il codice stesso non controlla se l'elemento 'synchronize_rfid' esiste. Ho provato a inviare una finestra di messaggio all'interno dell'istruzione if, ma non entra. –
'Me.Invoke (Sub() Me.TerminalBrowser.Document.GetElementById (" synchronize-rfid "))' restituirà sempre un valore di Nothing in quanto una subroutine non restituisce un valore. Supponendo che TerminalBrowser sia il riferimento corretto, sarà necessario utilizzare una funzione lambda rispetto al metodo lambda nell'istruzione 'Me.Invoke'. Il motivo per cui è "TerminalBrowser è il riferimento corretto" è perché si indica che l'elemento si trova in una finestra popup e che potrebbe essere un'istanza del browser diversa. – TnTinMn