首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

selenium webdriver散记

2012-12-21 
selenium webdriver杂记1 简述通过研究selenium-webdriver的源码,笔者发现其实webdriver的实现原理并不高

selenium webdriver杂记

1 简述通过研究selenium-webdriver的源码,笔者发现其实webdriver的实现原理并不高深莫测无法揣度。在这里以webdriver ruby binding的firefox-webdriver实现为例,简单介绍一下webdriver的工作原理。
当测试脚本启动firefox的时候,selenium-webdriver 会首先在新线程中启动firefox浏览器。如果测试脚本指定了firefox的profile,那么就以该profile启动,否则的话就新启1个profile,并启动firefox;
firefox一般是以-no-remote的方法启动,启动后selenium-webdriver会将firefox绑定到特定的端口,绑定完成后该firefox实例便作为webdriver的remote server存在;
客户端(也就是测试脚本)创建1个session,在该session中通过http请求向remote server发送restful的请求,remote server解析请求,完成相应操作并返回response;
客户端接受response,并分析其返回值以决定是转到第3步还是结束脚本
http://17test.info/?p=280

2 selenium需要改进的地方1 不能够直接使用已经打开的浏览器, 即使是用selenium打开的也不行
2 js弹出窗, 不支持IEdriver.switch_to.alert.accpect会被阻塞, 然后报runtime error

3 同时打开多个TAB, 多个实例, 多个浏览器?



3 笔记
通过?driver = Selenium::WebDriver.for :firefox 获取到的driver, 根据不同的浏览器,?@return [Driver]? ? #? ? # @see Selenium::WebDriver::Remote::Bridge? ? # @see Selenium::WebDriver::Firefox::Bridge? ? # @see Selenium::WebDriver::IE::Bridge? ? # @see Selenium::WebDriver::Chrome::Bridge? ? # @see Selenium::WebDriver::Android::Bridge? ? # @see Selenium::WebDriver::IPhone::Bridge? ? # @see Selenium::WebDriver::Opera::Bridge? ? #

irb(main):009:0> driver.capabilities=> #<Selenium::WebDriver::Remote::Capabilities:0xae5c40 @capabilities={:browser_name=>"firefox", :version=>"10.0.2", :platform=>:winnt, :javascript_enabled=>true, :css_selectors_enabled=>true, :takes_screenshot=>true, :native_events=>false,?:rotatable=>nil, :firefox_profile=>nil, :proxy=>nil, "handlesAlerts"=>true}>

需要注意的是 for返回的数据类型是Driver, 有一个实例变量@bridge, 很多公用的方法定义在remote::Bridge中, 特殊的方法定义在Firefox::Bridge中。由于firefox的bridge为私有变量, 不能这样用: driver.bridge

重命名的方法有 first all script --> find_element find_elements execute_script



最终调用的是remote/bridge.rb中的raw_execute方法: ?加上一个puts语句 可以调试
irb(main):002:0> s=Selenium::WebDriver.for :firefoxpostsession{:desiredCapabilities=>#<Selenium::WebDriver::Remote::Capabilities:0xf606a8 @capabilities={:browser_name=>"firefox", :version=>"", :platform=>:any, :javascript_enabled=>true, :css_selectors_enabled=>true, :takes_screenshot=>true, :native_events=>true, :rotatable=>false, :firefox_profile=>nil, :proxy=>nil}>}=> #<Selenium::WebDriver::Driver:0x..f9f8da084 browser=:firefox>irb(main):003:0> s.get 'http://baidu.com'postsession/76252388-68ae-4145-ab92-049f47e7aa4d/url{:url=>"http://baidu.com"}=> ""


irb(main):009:0> a= s.find_element :id=>'q'postsession/76252388-68ae-4145-ab92-049f47e7aa4d/element{:using=>"id", :value=>"q"}

热点排行