操作富文本框-就是邮件正文部分,可以选字体啥的

第一种方式:

一般都是在iframe里,要切进去,一般是”html/body”,编辑之后,再切出来,然后再send_keys就完事儿

#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

class TestDemo(unittest.TestCase):

def setUp(self):

# 启动Firefox浏览器

#self.driver = webdriver.Ie(executable_path = "e:\\IEDriverServer")

self.driver = webdriver.Firefox(executable_path="c:\\geckodriver")

def test_SohuMailSendEMail(self):

url = "http://mail.sohu.com"

# 访问搜狐邮箱登录页

self.driver.get(url)

try:

userName = self.driver.find_element_by_xpath\

(u'//input[@placeholder="请输入您的邮箱"]')

userName.clear()

userName.send_keys("fosterwu")

passWord = self.driver.find_element_by_xpath\

(u'//input[@placeholder="请输入您的密码"]')

passWord.clear()

passWord.send_keys("1111")

login = self.driver.find_element_by_xpath(u'//input[@value="登 录"]')

login.click()

wait = WebDriverWait(self.driver, 10)

# 显示等待,确定页面是否成功登录并跳转到登录成功后的首页

wait.until(EC.element_to_be_clickable\

((By.XPATH, '//li[text()="写邮件"]')))

self.driver.find_element_by_xpath(u'//li[text()="写邮件"]').click()

time.sleep(2)

receiver = self.driver.find_element_by_xpath\

('//div[@arr="mail.to_render"]//input')

# 输入收件人

receiver.send_keys("fosterwu@sohu.com")

subject = self.driver.find_element_by_xpath\

('//input[@ng-model="mail.subject"]')

# 输入邮件标题

subject.send_keys(u"一封测试邮件!")

# 获取邮件正文编辑区域的iframe页面元素对象

iframe = self.driver.find_element_by_xpath\

('//iframe[contains(@id, "ueditor")]')

# 通过switch_to.frame()方法切换进入富文本框中

self.driver.switch_to.frame(iframe)

# 获取富文本框中编辑页面元素对象

editBox = self.driver.find_element_by_xpath("/html/body")

# 输入邮件正文

editBox.send_keys(u"邮件的正文内容")

# 从富文本框中切换出,回到默认页面

self.driver.switch_to.default_content()

# 找到页面上的“发送”按钮,并单击它

self.driver.find_element_by_xpath('//span[.="发送"]').click()

# 显示都等待含有关键字串“发送成功”的页面元素出现在页面中

wait.until(EC.visibility_of_element_located\

((By.XPATH, '//span[.="发送成功"]')))

print u"邮件发送成功"

except TimeoutException:

print u"显示等待页面元素超时"

except NoSuchElementException:

print u"寻找的页面元素不存在", traceback.print_exc()

except Exception:

# 打印其他异常堆栈信息

print traceback.print_exc()

def tearDown(self):

# 退出IE浏览器

self.driver.quit()

if __name__ == '__main__':

unittest.main()

D:\test>python test.py

邮件发送成功

.

----------------------------------------------------------------------

Ran 1 test in 58.226s

 

OK

第二种方法:

切到iframe里,然后执行js的方式,找到这个元素,(三种方式:d,名字,标签名—)

#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

 

class TestDemo(unittest.TestCase):

 

    def setUp(self):

        # 启动Firefox浏览器

        #self.driver = webdriver.Firefox(executable_path="c:\\geckodriver")

        self.driver = webdriver.Firefox(executable_path = "d:\\geckodriver")

    def test_SohuMailSendEMail(self):

        url = "http://mail.sohu.com"

        # 访问搜狐邮箱登录页

        self.driver.get(url)

        try:

            userName = self.driver.find_element_by_xpath\

                ('//input[@placeholder="请输入您的邮箱"]')

            userName.clear()

            userName.send_keys("fosterwu")

            passWord = self.driver.find_element_by_xpath\

                ('//input[@placeholder="请输入您的密码"]')

            passWord.clear()

            passWord.send_keys("1111")

            login = self.driver.find_element_by_xpath('//input[@value="登 录"]')

            login.click()

            wait = WebDriverWait(self.driver, 10)

            # 显示等待,确定页面是否成功登录并跳转到登录成功后的首页

            wait.until(EC.element_to_be_clickable\

                           ((By.XPATH, '//li[text()="写邮件"]')))

            self.driver.find_element_by_xpath('//li[text()="写邮件"]').click()

            time.sleep(2)

            receiver = self.driver.find_element_by_xpath\

                ('//div[@arr="mail.to_render"]//input')

            # 输入收件人

            receiver.send_keys("fosterwu@sohu.com")

            subject = self.driver.find_element_by_xpath\

                ('//input[@ng-model="mail.subject"]')

            # 输入邮件标题

            subject.send_keys(u"一封测试邮件!")

            # 获取邮件正文编辑区域的iframe页面元素对象

            iframe = self.driver.find_element_by_xpath\

                ('//iframe[contains(@id, "ueditor")]')

            # 通过switch_to.frame()方法切换进入富文本框中

            self.driver.switch_to.frame(iframe)

            # 通过JavaScript代码向邮件正文编辑框中输入正文

            self.driver.execute_script("document.getElementsByTagName('body')\

                [0].innerHTML='<b>邮件的正文内容<b>;'")

            # 从富文本框中切换出,回到默认页面

            self.driver.switch_to.default_content()

            # 找到页面上的“发送”按钮,并单击它

            self.driver.find_element_by_xpath('//span[.="发送"]').click()

            # 显示都等待含有关键字串“发送成功”的页面元素出现在页面中

            wait.until(EC.visibility_of_element_located\

                           ((By.XPATH, '//span[.="发送成功"]')))

            print u"邮件发送成功"

        except TimeoutException:

            print u"显示等待页面元素超时"

        except NoSuchElementException:

            print u"寻找的页面元素不存在", traceback.print_exc()

        except Exception:

            # 打印其他异常堆栈信息

            print traceback.print_exc()

 

    def tearDown(self):

        # 退出IE浏览器

        self.driver.quit()

 

if __name__ == '__main__':

    unittest.main()

 

D:\test>python test.py

邮件发送成功

.

----------------------------------------------------------------------

Ran 1 test in 49.789s

 

OK

 

 

第三种方法:键盘事件,用tab键切换到frame区域,推荐使前两种方法

#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.common.keys import Keys

import win32clipboard as w

import win32api, win32con

 

# 用于设置剪切板内容

def setText(aString):

    w.OpenClipboard()

    w.EmptyClipboard()

    w.SetClipboardData(win32con.CF_UNICODETEXT, aString)

    w.CloseClipboard()

 

# 键盘按键映射字典

VK_CODE = {'ctrl':0x11, 'v':0x56}

 

# 键盘键按下

def keyDown(keyName):

    win32api.keybd_event(VK_CODE[keyName], 0, 0, 0)

# 键盘键抬起

def keyUp(keyName):

    win32api.keybd_event(VK_CODE[keyName], 0, win32con.KEYEVENTF_KEYUP, 0)

 

class TestDemo(unittest.TestCase):

 

    def setUp(self):

        # 启动Firefox浏览器

        self.driver = webdriver.Firefox(executable_path="c:\\geckodriver")

 

    def test_SohuMailSendEMail(self):

        url = "http://mail.sohu.com"

        # 访问搜狐邮箱登录页

        self.driver.get(url)

        try:

            userName = self.driver.find_element_by_xpath\

                ('//input[@placeholder="请输入您的邮箱"]')

            userName.clear()

            userName.send_keys("fosterwu")

            passWord = self.driver.find_element_by_xpath\

                ('//input[@placeholder="请输入您的密码"]')

            passWord.clear()

            passWord.send_keys("1111")

            login = self.driver.find_element_by_xpath('//input[@value="登 录"]')

            login.click()

            wait = WebDriverWait(self.driver, 10)

            # 显示等待,确定页面是否成功登录并跳转到登录成功后的首页

            wait.until(EC.element_to_be_clickable\

                           ((By.XPATH, '//li[text()="写邮件"]')))

            self.driver.find_element_by_xpath('//li[text()="写邮件"]').click()

            time.sleep(2)

            receiver = self.driver.find_element_by_xpath\

                ('//div[@arr="mail.to_render"]//input')

            # 输入收件人

            receiver.send_keys("xiaxiaoxu1987@163.com")

            subject = self.driver.find_element_by_xpath\

                ('//input[@ng-model="mail.subject"]')

            # 输入邮件标题

            subject.send_keys(u"一封测试邮件!")

            # 输入完邮件标题后,按下Tab键可以将页面焦点切换到富文本框编辑区域

            subject.send_keys(Keys.TAB)

            # 设置剪切板内容,也就是将要输入的正文内容

            setText(u"邮件正文内容")

            # 模拟键盘的Ctrl + v组合键,将剪切板内容粘贴到富文本编辑区中

            keyDown("ctrl")

            keyDown("v")

            keyUp("v")

            keyUp("ctrl")

            # 找到页面上的“发送”按钮,并单击它

            self.driver.find_element_by_xpath('//span[.="发送"]').click()

            # 显示都等待含有关键字串“发送成功”的页面元素出现在页面中

            wait.until(EC.visibility_of_element_located\

                           ((By.XPATH, '//span[.="发送成功"]')))

            print u"邮件发送成功"

        except TimeoutException:

            print u"显示等待页面元素超时"

        except NoSuchElementException:

            print u"寻找的页面元素不存在", traceback.print_exc()

        except Exception:

            # 打印其他异常堆栈信息

            print traceback.print_exc()

 

    def tearDown(self):

        # 退出IE浏览器

        self.driver.quit()

 

if __name__ == '__main__':

unittest.main()

 

 

D:\test>python test.py

邮件发送成功

.

----------------------------------------------------------------------

Ran 1 test in 54.255s

 

OK

python webdriver api-操作富文本框的更多相关文章

  1. webdriver高级应用- 操作富文本框

    富文本框的技术实现和普通的文本框的定位存在较大的区别,富文本框的常见技术用到了Frame标签,并且在Frame里面实现了一个完整的HTML网页结构,所以使用普通的定位模式将无法直接定位到富文本框对象. ...

  2. Selenium常用API用法示例集----下拉框、文本域及富文本框、弹窗、JS、frame、文件上传和下载

    元素识别方法.一组元素定位.鼠标操作.多窗口处理.下拉框.文本域及富文本框.弹窗.JS.frame.文件上传和下载 元素识别方法: driver.find_element_by_id() driver ...

  3. Selenium示例集锦--常见元素识别方法、下拉框、文本域及富文本框、鼠标操作、一组元素定位、弹窗、多窗口处理、JS、frame、文件上传和下载

    元素定位及其他操作 0.常见的识别元素的方法是什么? driver.find_element_by_id() driver.find_element_by_name() driver.find_ele ...

  4. django(7)modelform操作及验证、ajax操作普通表单数据提交、文件上传、富文本框基本使用

    一.modelForm操作及验证 1.获取数据库数据,界面展示数据并且获取前端提交的数据,并动态显示select框中的数据 views.py from django.shortcuts import ...

  5. vue集成CKEditor构建框架的使用,遇到富文本框不出现工具栏等操作

    官方关于Vue集成CKEditor富文本框的文档:https://ckeditor.com/docs/ckeditor5/latest/builds/guides/integration/framew ...

  6. Java + selenium 元素定位(6)之iframe切换(即对富文本框的操作)

    在元素定位中,对富文本框的元素定位是特别的,当我们使用普通的元素定位方法对富文本框进行操作时,我们会发现不管我们之前介绍的八种方法中的任何方法,我们都不能成功定位到富文本框,并对其进行操作.那是因为富 ...

  7. selenium 富文本框处理

    selenium 富文本框处理, 网上有用API的解决方法1:参见:http://blog.csdn.net/xc5683/article/details/8963621 群里1位群友的解决方法2:参 ...

  8. Android 富文本框实现 RichEditText

    Android系统自带控件没有富文本框控件,如果想写一封带格式的邮件基本上不可能,EdtiText只有默认一种格式,显示不能滿足要求,!!正好项目需要研究了一下,开发了此控件,现将一些源代码开放一下, ...

  9. 第三百九十五节,Django+Xadmin打造上线标准的在线教育平台—Xadmin集成富文本框

    第三百九十五节,Django+Xadmin打造上线标准的在线教育平台—Xadmin集成富文本框 首先安装DjangoUeditor3模块 Ueditor HTML编辑器是百度开源的HTML编辑器 下载 ...

随机推荐

  1. RF使用的相关库API

    RF内置库: http://robotframework.org/robotframework/ SSHLibrary:   ---WEB自动化测试 http://robotframework.org ...

  2. Cognos入门教程

    Cognos入门教程 1. ReportStudio入门教程 ReportStudio入门教程(http://blog.csdn.net/column/details/ygy-reportstudio ...

  3. linux下一些常用命令和访问目录

    1. 目录      ls   列出目录文件名      ll    列出所有目录文件的访问权限等相关信息,包括 .   ..      ls -a  列出所有目录文件名,包括 .   .. ls - ...

  4. 170807、intellij idea maven集成lombok实例

    简介: lombok 通过简单注解方式简化java代码.(如消除实体对象的get/setter方法.日志对象声明等...) 安装步骤: 1.选择支持注解处理:Settings-->Build-- ...

  5. 170509、文本编辑器编写的shell脚本在linux下无法执行的解决方法

    今天碰到一个奇怪的问题,编写好的shell脚本再linux上执行一直提示找不到文件或目录,后来想想是文本编辑器的问题,记录下来!!! 1.查看当前文本格式 Notepad++界面中,在右下角有文件格式 ...

  6. Python默认调用路径

    记录个遇到的小问题,防止下次遇到忘记怎么解. 起因:pip安装扩展库时提示安装完成,但是在Python 终端下无法import 现象:终端直接运行python 时提示如下:(2.7.13)然而用/us ...

  7. How many ways??---hdu2157(矩阵快速幂)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2157   题意:有一个有向图,含有n个节点,m条边,Q个询问,每个询问有 s,t,p,求 s 到 t ...

  8. Python开发【模块】:time、datatime

    时间模块 时间相关的操作,时间有三种表示方式: 时间戳               1970年1月1日之后的秒,即:time.time() 格式化的字符串    2014-11-11 11:11,   ...

  9. Python开发【Tornado】:简介与使用

    Tornado框架 简介: Tornado是使用Python编写的一个强大的.可扩展的Web服务器.它在处理严峻的网络流量时表现得足够强健,但却在创建和编写时有着足够的轻量级,并能够被用在大量的应用和 ...

  10. 双态运维分享之二: 服务型CMDB的消费场景

    近年来,CMDB在IT运维管理中的价值逐步得到认可,使用CMDB的期望值也日益增长.然而,CMDB实施和维护的高成本却一直是建设者们的痛点.那么今天,我们来探讨一下如何通过消费来持续驱动CMDB的逐步 ...