最近在学webdriver,用手头的项目做了一个小demo,真是阻碍重重,别看看短短的几行代码,丫的一直报错,还不知道错在哪里。哎,没办法,刚入门的菜鸟总是备受打击。由于这么几行代码是花了一个星期的上班空闲时间写出来的,有必要做一下小小的总结。不管怎么说,虽然这段小代码不完美,有时还是会报莫名其妙的错,但还是相当有必要做个总结的,付出了时间嘛。再说很久没更新博客了,太懒了(鄙视一下自己)
#encoding: gbk require ‘selenium-webdriver‘ dr = Selenium::WebDriver.for:firefox url = ‘http://XXXXXX‘ dr.get url dr.find_element(:id,‘iptUid‘).send_keys(‘XXXXXXX‘) dr.find_element(:id,‘iptPwd‘).send_keys(‘XXXXXX‘) dr.find_element(:id,‘btnLogin‘).click sleep 2 dr.manage.window.maximize() #dr.find_element(:id,‘closePop‘).click dr.action.send_keys(:escape).perform dr.find_element(:xpath => %Q{//*[@id=‘G_H‘]/div[1]/div[3]/ul/li[2]/a}).click sleep 10 dr.find_element(:id,‘account‘).send_keys(‘XXXXXXX‘) dr.find_element(:class,‘btn_search_id‘).click sleep 10 dr.switch_to.window dr.window_handles.last dr.find_element(:xpath => %Q{html/body/div[3]/div/div/div[6]/div[1]/div[1]/div[3]/ul/li[5]/dl/dd[1]/a}).click sleep 5 # dr.switch_to.window dr.window_handles.last puts "title of current page is #{dr.title}" dr.find_element(:id,‘mailcontent‘).send_keys(‘WebDriver using in firefox! Ok Do something more interesting^_^‘) dr.find_element(:class,‘btn_mobile_blue_02‘).click dr.quit
本来选择ruby来写是因为ruby的可读性好,可没想到ruby跟webdriver相关的资料实在是不多,甚至连某个方法是怎么用的语法都不知道,经常报那些NoMethod错误,真是我也很无语。以至于出了错误google也好百度也罢,总是很难找到自己想要的,不过最终解决还是靠google,只是花的时间多了。现在就总结花时间花最多的点:
1.操作键盘的某些键
这个真的很坑,网上找了好久都没找到确切答案,最后还是自己一遍遍试出来的。本来知道是用send_keys这个方法,可是就是不知道怎么用,结果就是各种报错,什么NoMethod啊之类乱七八糟的错误都出来了,好不容易在网上看到有java写的代码,结果人家java又没有加上perform,还是错了。总之折腾了很久,好在解决了,也知道鼠标和键盘的很多操作都是要用到action类来调用相应的方法的。
2.在新打开浏览器页面上操作
由于菜鸟的原因,结果在整个过程中产生了新打开浏览器页面的时候以为自然而然就会到新开页面去找对应的元素,结果丫的一直报找不到元素的错,然后我以为是我的定位方式错了,用了id不行,用了class不行,用了css不行,用了xpath还是不行,搞得我差点崩溃。好吧,不得不承认自己很弱智,其实很简单的问题可就是没那个意识,就陷进死胡同了,然后就出不来了。难怪老是报找不到页面元素,根本就没在新开页面上找,当然找不到。好不容易等我意识到错在哪里的时候(其实还是看到网上的一篇博客的介绍),不过那篇博客并没有帮我解决问题,可能watir跟webdriver还是有区别吧,反正有window这个类就是没有那样的用法,更别说直接用window(‘title’).use这样的方式了。然后也是各种找,终于让我找到了switch_to,可是就是不会用,就是现在具体怎么用也还是不知道。dr.switch_to.window dr.window_handles last这行代码我也只是知道切换到最后一个打开的页面去进行操作而已,如果是想实现自由切换什么的,还是做不到,不过现在有点眉目了,相信应该用不了多长时间就可以搞定了。
3.乱码的问题
乱码的问题我真是无力吐槽,本来就不是外国人做的项目根本不能要求不出现中文的情况,可就是不明白所有的人用了utf-8就解决了乱码问题,我就愣是不行,结果坑爹的是花了那么多时间去search,告诉我的无一都是加这么一句#encoding:utf-8。(我勒个去)我加了,从头到尾检查不下数十遍,拼写错误神马的也没有,可还就是给我继续乱码。最后我都差点放弃了,乱码就乱码吧,能正常跑起来就好。幸好突然想起来除了utf-8,还有其他方式,就抱着试一试的心态把utf-8换成了gbk,结果就搞定了。哎,编程语言的博大精深,我这种菜鸟只能无限感慨了。
其实还有其他问题也很让我纠结的,不过这里就不说了,再说下去也挺打击我学习的积极性的。上面那段代码就是最简单最原始的代码了,没有对可能出现的异常呀超时呀什么的做判断,所以不是每次都能跑成功的。用一句话来概括就是:弱爆了。哎,不说了,路还远着呢,慢慢走吧。