最近重新熟悉Web driver,以前曾经摸索过Selenium,不过这次发现Watir+Webdriver用起来也是蛮就手。admin管理员组文章数量:1663659
以下是一个脚本实现了登陆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'
# 输入邮箱账户
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自动化方面的各种应用。
本文标签: 自动登录发送电子邮件邮箱WatirWebdriver
版权声明:本文标题:【Watir Webdriver】自动登录QQ邮箱并发送电子邮件 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1730000168a1218750.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论