python3+selenium实现126邮箱登陆并发送带附件的邮件(显示等待版本)

9 篇文章 0 订阅
6 篇文章 0 订阅

与之前登陆的版本类似,采用了显示等待的方法判断元素可见

#encoding=utf-8
from selenium import webdriver
import time
import traceback
# 导入By类
from selenium.webdriver.common.by import By
# 导入显示等待类
from selenium.webdriver.support.ui import WebDriverWait
# 导入期望场景类
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException, NoSuchElementException
        

def visible_by_xpath(driver,xpath_exp):
     '''xpath定位元素是否可见'''
     wait = WebDriverWait(driver, 10, 0.2)
     wait.until(EC.visibility_of_element_located((By.XPATH, xpath_exp)))

def visible_by_id(driver,id_exp):
     '''id定位元素是否可见'''
     wait = WebDriverWait(driver, 10, 0.2)
     wait.until(EC.visibility_of_element_located((By.ID, id_exp)))

def switch_to_iframe(driver,xpath_exp):
     '''切入指定的frame'''
    wait = WebDriverWait(driver, 10, 0.2)
    wait.until(EC.frame_to_be_available_and_switch_to_it(driver.find_element_by_xpath(xpath_exp)))

######################################
#进入126邮箱首页
driver=webdriver.Chrome()
driver.get("http://mail.126.com")
time.sleep(3)

'''登陆'''
#切入到账号登陆frame
switch_to_iframe(driver,'//*[@class="loginWrap"]/div/iframe')
#定位到用户名输入框
username=driver.find_element_by_xpath("//input[@placeholder='邮箱帐号或手机号' and @name='email']")
#定位到密码输入框
password=driver.find_element_by_xpath("//input[@placeholder='密码']")
#定位到登陆按钮
submit_button=driver.find_element_by_xpath("//a[@id='dologin']")
#清除并分别输入用户名和密码(********替换为自己的用户名和密码********)
username.clear()
password.clear()
username.send_keys("xxxxxxxxx")
password.send_keys("111111111")
#单击登陆按钮
submit_button.click()
#断言登陆成功
visible_by_xpath(driver,"//a[contains(text(),'退出')]")
assert u"退出"  in driver.page_source

'''写邮件并添加附件'''
#单击写信
write_lettre_link=driver.find_element_by_xpath("//span[text()='写 信']")
write_lettre_link.click()
#断言弹出写信的frame
visible_by_xpath(driver,"//footer//span[text()='发送']")
#定位到收件人,主题,添加附件,正文
mail_address=driver.find_element_by_xpath("//input[@role='combobox' and @tabindex='1']")
mail_subject=driver.find_element_by_xpath("//input[@tabindex='1' and @maxlength='256']")
file_element=driver.find_element_by_xpath("//input[@type='file']")
mail_address.send_keys("111111111@126.com")
mail_subject.send_keys(u"测试邮件")
file_element.send_keys("c:\\a.txt")#必须是绝对路径,否则会报错

time.sleep(1)
visible_by_xpath(driver,"//span[text()='上传完成']")
driver.switch_to.frame(driver.find_element_by_xpath("//iframe[@tabindex=1]"))
driver.execute_script("document.getElementsByTagName('body')\
                [0].innerHTML='<b>邮件的正文内容<b>;'")
driver.switch_to.default_content()

'''发送'''
send_mail_button=driver.find_element_by_xpath("//div/div/span[text()='发送']")
send_mail_button.click()
visible_by_xpath(driver,"//h1")
assert u"发送成功"  in driver.page_source

logout_link=driver.find_element_by_xpath("//a[text()='退出']")
visible_by_xpath(driver,"//h1")
assert u"登录"  in driver.page_source

'''退出浏览器'''
driver.quit()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值