delphi版的 selenium测试

python的selenium模块非常好用,用在内部web网页系统获取数据和自动操作非常方便,于是在想delphi有没有selenium可用,找了一下,在github真的发现有.

网址: https://github.com/Ericwang1104/WebDriver4D

下载下来了后,加入delphi的搜索路径就可以用.

在delphi 10.4的操作就是打开菜单 tools => option => language => delphi => library => library path , 加WebDriver4D目录就可以了,默认是win32bit版本的,其它win64bit也要这样添加,然后就代码里引用库就可以了, WebDriver4D里边有例子.

以下是操作代码,是一个控制台程序.

program liulanqi2;

{$APPTYPE CONSOLE}

{$R *.res}

uses
System.SysUtils,WD_http ,WebDriver4D,wd_httpDelphi;
var
//bmp2:Tbitmap; uses Vcl.Graphics
WD: TWebDriver;
Ele, Ele1: TWebElement;
Ele2: TWebElements;
xxx:string;
//FCMD: TDelphiCommand;
begin
WD := TChromeDriver.Create(nil);
//bmp2:= Tbitmap.Create;
//WD := TPhantomjs.Create(nil);
//FCMD:= TDelphiCommand.Create(nil);;
try
try

      WD.Address := 'localhost';
      //WD.Port := 7777;

      //Webdriver4D.pas   chrome --headless 无头模式  ,大概1476行
      // +'"args": []}}},'   //正常模式
      //+ ' "args": ["--headless","--disable-gpu"]}}},' // hidden mode



      WD.StartDriver('D:/Anaconda3/chromedriver.exe');//路径正确
      //WD.StartDriver('D:/tools/delphi/WebDriver4D-master/WebDriver/phantomjs.exe');//路径正确
      //WD.Path :='';
      //WD.Cmd:= FCMD;
      //WD.Canshu:= '--headless';
      Sleep(500);
      WD.NewSession;
      WD.GetURL('https://www.lpfrx.com');
      //WD.SwitchToFrame('x-URS-iframe');


      Sleep(3000);
      Ele := WD.FindElementByXPath('//*[@id="s"]');


      //Sleep(5000);
      //定位搜索框,滚动画面   document.evaluat  可以用xpath定位
      WD.ExecuteScript('document.evaluate("//*[@id=''s'']", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.scrollIntoView();');
      Ele.Click;
      //WD.ExecuteScript('document.getElementsByTagName("input")[0].scrollIntoView();');

      Sleep(1000);
      Ele.SendKey('delphi');

      Ele1 := WD.FindElementByXPath('//*[@id="searchsubmit"]');
      WD.ExecuteScript('document.evaluate("//*[@id=''searchsubmit'']", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.scrollIntoView();');

      Sleep(2000);
      Ele1.Click;
      Writeln('hello world');   //输出一句话
      Sleep(1200);
      // html title
      //xxx := WD.ExecuteScript('return document.title');
      // 截图
      WD.ScreenShot('./s.bmp');
      // html body text
      xxx := WD.ExecuteScript('return document.body.innerText');
      Writeln(xxx);
      Ele2 := WD.FindElementsByXPath('//*[@id="s"]');
      Writeln('Ele2 搜索框数量:'+ inttostr(Ele2.Count));
      //Writeln(wd.ExecuteScript('return document.title'));
      Sleep(5000);
      wd.Quit;
  finally
      FreeAndNil(WD);
      //FreeAndNil(FCMD);
      //bmp2.Free;
  end;
{ TODO -oUser -cConsole Main : Insert code here }

except
on E: Exception do
Writeln(E.ClassName, ‘: ‘, E.Message);
end;
end.

整体跟python版操作差不多, 其实说到底seleium操作原理就是程序发送http json到chromedriver.exe程序操作,可以网上去看看selenium操作原理.

关于无聊人

一个无聊人而已
此条目发表在delphi分类目录。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注