Как установить значение для флажка через EmbeddedWB.FillForm? (Delphi)
Как я могу установить значение для флажка с помощью метода FillForm? Я пробовал это, но не работает:
W.FillForm('Chkname', 'True');
W.FillForm('Chkname', '1');
W.FillForm('Chkname', '', 1);
1 ответ
Довольно поздно, я знаю, но я постараюсь ответить на этот вопрос, так как это хороший вопрос, и поскольку даже текущая версия TEmbeddedWB
не реализована эта функция.
Однако вы можете добавить свою собственную функцию для этого; В следующем примере я использую вставленный класс TEmbeddedWB
где я перегружен FillForm
функция с версией, которая поддерживает флажок и заполнение переключателя.
Если вы хотите установить флажок или установить переключатель, вызовите эту версию функции, где:
- FieldName (строка) - это имя элемента
- Value (строка) - значение элемента (может быть пустым, но в этом случае будет установлен первый элемент FieldName; веб-разработчики должны использовать пары имя-значение IMHO)
- Select (Boolean) - если True, установлен флажок или установлен переключатель
Вот код:
uses
EmbeddedWB, MSHTML;
type
TEmbeddedWB = class(EmbeddedWB.TEmbeddedWB)
public
function FillForm(const FieldName, Value: string;
Select: Boolean): Boolean; overload;
end;
implementation
function TEmbeddedWB.FillForm(const FieldName, Value: string;
Select: Boolean): Boolean;
var
I: Integer;
Element: IHTMLElement;
InputElement: IHTMLInputElement;
ElementCollection: IHTMLElementCollection;
begin
Result := False;
ElementCollection := (Document as IHTMLDocument3).getElementsByName(FieldName);
if Assigned(ElementCollection) then
for I := 0 to ElementCollection.length - 1 do
begin
Element := ElementCollection.item(I, '') as IHTMLElement;
if Assigned(Element) then
begin
if UpperCase(Element.tagName) = 'INPUT' then
begin
InputElement := (Element as IHTMLInputElement);
if ((InputElement.type_ = 'checkbox') or (InputElement.type_ = 'radio')) and
((Value = '') or (InputElement.value = Value)) then
begin
Result := True;
InputElement.checked := Select;
Break;
end;
end;
end;
end;
end;
А вот базовый пример использования:
procedure TForm1.Button1Click(Sender: TObject);
var
WebBrowser: TEmbeddedWB;
begin
WebBrowser := TEmbeddedWB.Create(Self);
WebBrowser.Parent := Self;
WebBrowser.Align := alClient;
WebBrowser.Navigate('http://www.w3schools.com/html/html_forms.asp');
if WebBrowser.WaitWhileBusy(15000) then
begin
if not WebBrowser.FillForm('sex', 'male', True) then
ShowMessage('Error while form filling occured...');
if not WebBrowser.FillForm('vehicle', 'Bike', True) then
ShowMessage('Error while form filling occured...');
if not WebBrowser.FillForm('vehicle', 'Car', True) then
ShowMessage('Error while form filling occured...');
end;
end;