【Watir Webdriver】QQメールボックスに自動的にログインし、電子メールを送信


最近Web driverに再熟知し、以前Seleniumを模索したことがあるが、Watir+Webdriverも使いやすいことに気づいた.
以下は、QQメールボックスにログインし、メールを送信するスクリプトです.受信者、テーマ、本文、添付ファイルを指定し、最後に送信に成功したことを確認します.そうしないと、スクリーンショットを保存します.
説明:
1、スクリプトでwait_を頻繁に使用するuntil_present、保険のためです.もっと優雅な方法があるのではないでしょうか.
2、自分で開発したページではない場合は、ページのソースコード構造を分析する必要があります.例えば、QQメールボックスページでは、メール関連の様々な要素を正確に特定するためにframe(:id,'mainFrame')があることに注意する必要があります.
3、添付ファイルを追加する方法は手作業でクリックしたのではなく、ダイアログが出ない
4、スクリーンショットが便利で、browserを使う.screenshot.save
# coding: gb2312
require 'watir-webdriver'

#  String              gb2312,      gb2312  ,   Watir            
class String
	def gb2312
		self.encode("gb2312")
	end
end

#   chrome driver
browser = Watir::Browser.new :chrome

begin
	#   QQ    
	browser.goto 'http://mail.qq.com'
	
	#       
	browser.text_field(:name,"uin").wait_until_present
	browser.text_field(:name,"uin").send_keys("QQ  ")
	
	#     
	browser.text_field(:name, "p").wait_until_present
	browser.text_field(:name, "p").send_keys("  ")
	
	#     
	browser.input(:id, "btlogin").wait_until_present
        browser.input(:id, "btlogin").click

	#     
	browser.a(:id,"composebtn").wait_until_present
	browser.a(:id,"composebtn").click
	
	#        
	browser.frame(:id,'mainFrame').input(:xpath,"//div[@id='toAreaCtrl']/div[@class='addr_text']/input").wait_until_present
	browser.frame(:id,'mainFrame').input(:xpath,"//div[@id='toAreaCtrl']/div[@class='addr_text']/input").send_keys('       ')

	#     
	browser.frame(:id,'mainFrame').input(:xpath, "//td[@class='content_title']/div/div/div/input[@id='subject']").wait_until_present
	browser.frame(:id,'mainFrame').input(:xpath, "//td[@class='content_title']/div/div/div/input[@id='subject']").send_keys('    ')	
	
	#     
	browser.frame(:id,'mainFrame').iframe(:xpath, "//td[@class='qmEditorContent']/iframe").wait_until_present
	browser.frame(:id,'mainFrame').iframe(:xpath, "//td[@class='qmEditorContent']/iframe").send_keys('    ')	
		
	#     
	browser.frame(:id,'mainFrame').file_field(:name, 'UploadFile').set('C:/watir/qqmail.rb')
	
	#     
	browser.frame(:id,'mainFrame').a(:name, "sendbtn").wait_until_present
	browser.frame(:id,'mainFrame').a(:name, "sendbtn").click
	
	#                     
	sleep 60
	#       ,                  
	browser.frame(:id,'mainFrame').b(:id, "sendinfomsg").wait_until_present
	acctual_send_result_info = browser.frame(:id,'mainFrame').b(:id, "sendinfomsg").text.gb2312
	expect_send_result_info = "       "
	if acctual_send_result_info != expect_send_result_info
		browser.screenshot.save('d:/qqmail.rb.error.png')
		raise "       (#{acctual_send_result_info})     (#{expect_send_result_info})"
	end
	puts "    "
rescue => error
	puts "    :#{error}"
ensure
	browser.close if browser
end

次にWatir+WebdriverのWEB UI自動化における様々な応用をゆっくりとまとめる.