way1
练习:模拟发送邮件!
from selenium import webdriver
import time
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
def login_qq():
driver=webdriver.Chrome(executable_path="d:\\chromedriver.exe")
url="http://mail.qq.com"
driver.get(url)
login_frame=driver.find_element_by_id("login_frame")
driver.switch_to.frame(login_frame)
link_pass = driver.find_element_by_id('switcher_plogin')
time.sleep(2)
usernameBox=driver.find_element_by_id("u")
passBox=driver.find_element_by_id("p")
usernameBox.clear()
passBox.clear()
usernameBox.send_keys("XX@qq.com")
passBox.send_keys("111")
time.sleep(1)
btnLogin=driver.find_element_by_id("login_button")
btnLogin.click()
time.sleep(3)
#点击写信:
writeBox=driver.find_element_by_id("composebtn")
writeBox.click()
#切换到frame
mframe=driver.find_element_by_xpath("//*[@id='mainFrame']")
driver.switch_to.frame(mframe)
time.sleep(2)
#直接输入发送人的输入框
address=driver.find_element_by_id("toAreaCtrl")
time.sleep(1)
#填写收件人,不加click()
ActionChains(driver).move_to_element(address).send_keys(‘1581471139@qq.com’).perform()
#添加附件
driver.find_element_by_name("UploadFile").send_keys("d:\\urls.txt")
time.sleep(2)
#在正文添加内容,先切到正文的frame位置
content=driver.find_element_by_xpath("//div[@id='QMEditorArea']//iframe")
driver.switch_to.frame(content)
time.sleep(1)
driver.find_element_by_xpath("//div").send_keys(u"我是测试!")
#driver.find_element_by_id("QMEditorArea").send_keys(u"我是测试!")
time.sleep(3)
#返回到上一级父iframe
driver.switch_to.parent_frame()
driver.find_element_by_xpath("//a[@name='sendbtn' and @tabindex='9']").click()
time.sleep(2)
driver.quit()
if name==“main”:
login_qq()
1、switch_to.frame()方法来切换frame:reference是传入的参数,用来定位frame,传入id、name、index以及selenium的WebElement对象
2、driver.switch_to.frame(reference)
从子frame切回到父frame,而不用我们切回主文档再切进来
3、driver.switch_to.parent_frame()
切到frame中之后,我们便不能继续操作主文档的元素,这时如果想操作主文档内容,则需切回主文档。
driver.switch_to.default_content()
way2:
encoding=utf-8
from selenium import webdriver
import unittest, time, traceback
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException, NoSuchElementException
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains
class TestDemo(unittest.TestCase):
def setUp(self):
# 启动Firefox浏览器
# self.driver = webdriver.Firefox(executable_path="d:\\geckodriver")
# self.driver = webdriver.Ie(executable_path = "d:\\IEDriverServer")
self.driver = webdriver.Chrome(executable_path="d:\\chromedriver")
def test_SohuMailSendEMail(self):
url = "https://mail.qq.com/"
# 访问搜狐邮箱登录页
self.driver.get(url)
time.sleep(3)
try:
login_frame = self.driver.find_element_by_id("login_frame")
self.driver.switch_to.frame(login_frame)
self.driver.find_element_by_id("switcher_plogin").click()
userName = self.driver.find_element_by_id('u')
userName.clear()
userName.send_keys("XX@qq.com")
passWord = self.driver.find_element_by_id('p')
passWord.clear()
passWord.send_keys("111")
login = self.driver.find_element_by_id('login_button')
login.click()
# 这里是超时的影响
wait = WebDriverWait(self.driver,10)
# 显示等待,确定页面是否成功登录并跳转到登录成功后的首页
wait.until(EC.element_to_be_clickable((By.ID, 'composebtn')))
self.driver.find_element_by_id('composebtn').click()
time.sleep(2)
iframe = self.driver.find_element_by_id("mainFrame")
self.driver.switch_to.frame(iframe)
receiver = self.driver.find_element_by_id('toAreaCtrl')
# 输入收件人
ActionChains(self.driver).move_to_element(receiver).send_keys('1581471139@qq.com').perform()
time.sleep(2)
subject = self.driver.find_element_by_id("subject")
# 输入邮件标题
subject.send_keys("一封测试邮件")
time.sleep(3)
#添加附件
self.driver.find_element_by_name("UploadFile").send_keys("d:\\urls.txt")
time.sleep(2)
#添加正文
content=self.driver.find_element_by_xpath("//div[@id='QMEditorArea']//iframe")
self.driver.switch_to.frame(content)
self.driver.execute_script("document.getElementsByTagName('body')[0].innerHTML='<b>邮件的正文内容<b>;'")
time.sleep(3)
#切出页面,回到上一级页面
self.driver.switch_to.parent_frame()
#self.driver.switch_to.default_content()
self.driver.find_element_by_xpath("//a[@name='sendbtn' and @tabindex='9']").click()
wait.until(EC.visibility_of_element_located((By.XPATH,'//span[.="发送成功"]')))
print("邮件发送成功!")
except TimeoutException:
print("显示等待页面元素超时")
except NoSuchElementException:
print("寻找的页面元素不存在:",traceback.print_exc())
except Exception:
print(traceback.print_exc())
def tearDown(self):
self.driver.quit()
if name==“main”:
unittest.main()