分享

使用 Selenium 进行模拟登入和页面内容的获取

 quasiceo 2015-03-09

Selenium 是一个用于Web应用程序测试的工具(用处也不仅仅是测试)。
Selenium 直接使用浏览器运行,像真正的用户在操作。支持较多的浏览器。

组件

Selenium IDE:Firefox插件,有录制脚本的功能。支持自动录制动作和自动生成其他语言的自动化脚本。

Selenium Remote Control (RC) :支持多种平台(Windows,Linux)和多浏览器(IE,Firefox,Opera,Safari,Chrome),可以用多种语言(Java,Ruby,Python,Perl,PHP,C#)编写用例。

Selenium Grid :允许Selenium-RC 针对规模庞大的测试案例集或者需要在不同环境中运行的测试案例集进行扩展。


实例:驱动 chrome 模拟登入淘宝,获取页面信息

1.前往项目主页:SeleniumHQ 下载

  • Selenium Server (formerly the Selenium RC Server)

  • Third Party Browser Drivers NOT DEVELOPED by seleniumhq

(选择chrome的driver)

  • Third Party Language Bindings NOT DEVELOPED by seleniumhq

(选择PHP by Adam Goucher (SeHQ recommended php client))

2.打开 selenium

java -jar path_to_selenium.jar 
[-timeout 0] 
[-Dwebdriver.server.session.timeout=0] 
-Dwebdriver.chrome.driver="path_to_chrome_driver"
-browser [-timeout=0] [-browserTimeout=0]
browserName=chrome,[timeout=0]

如需长时间运行请酌情设置各 '[ ]' 中的超时时间

3.PHP代码

execute(array('script' => "return (document.readyState != 'complete')", 'args' => array())));
}  //该函数会把脚本挂起直到等待到Ajax结束

require_once "webdriver/PHPWebDriver/__init__.php";
// 引入 selenium 的PHP封装函数库
// 下载地址:https://github.com/Element-34/php-webdriver
// 文档中有各种操作浏览器方法,如获取所有cookie等

$wd_host = 'http://127.0.0.1:4444/wd/hub';
$web_driver = new PHPWebDriver_WebDriver($wd_host);

$session = $web_driver->session('chrome');

//设置超时时间
$session->implicitlyWait(5);
$session->setScriptTimeout(5);
$session->setPageLoadTimeout(15);

//打开连接
$session->open('http://login.m.taobao.com/login.htm?tpl_redirect_url=http://m.taobao.com');

//输入验证码用,如果需要的话
sleep(5);

//请设置好账号密码
$session->element('css selector', 'input[name=TPL_username]')->value(array('value' => str_split('your_username')));
$session->element('css selector', 'input[name=TPL_password]')->value(array('value' => str_split('your_password')));

//模拟点击登入按钮
$elements = $session->element('css selector', '.c-btn-oran-big')->click();

//打开 m.taobao.com,此时已获取到cookie
$session->open('http://m.taobao.com/');

//等待ajax加载完毕
waitForAjax();

$elements = $session->element('css selector', 'body')->text();
//获得了登入后ajax执行完毕时的页面内容
?>

之后便可以按需对 $session 实例进行 element 方法的各种操作。

支持以下方式进行选择元素

  • id
  • xpath
  • link text
  • partial link text
  • name
  • tag name
  • class name
  • css selector

PS:各种库对Ajax情况的检测方法

  • jQuery: "jQuery.active"

  • Prototype: "Ajax.activeRequestCount"

  • Dojo: "dojo.io.XMLHTTPTransport.inFlight.length"

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多