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

第一种方式:

一般都是在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. help()

    help() 用于查看函数或模块的帮助信息 In [1]: help(id) # 查看id()这个函数的帮助信息,注意不要写成help(id()) id(...) id(object) -> i ...

  2. PHP常用必备函数

    array_change_key_case — 返回字符串键名全为小写或大写的数组 array_chunk — 将一个数组分割成多个 array_combine — 创建一个数组,用一个数组的值作为其 ...

  3. Lua脚本和C++交互(二)

    上一节讲了一些基本的Lua应用,下面,我要强调一下,Lua的栈的一些概念,因为这个确实很重要,你会经常用到.熟练使用Lua,最重要的就是要时刻知道什么时候栈里面的数据是什么顺序,都是什么.如果你能熟练 ...

  4. cocos2dx游戏--欢欢英雄传说--添加触摸响应

    主要的调整就是将HelloWorldScene改成了MainSecne,然后将Player作为了MainScene的私有成员变量来处理.修改了人物图片,使用了网上找到的三国战纪的人物素材代替我之前画的 ...

  5. jQuery之ajaxForm提交表单

      1.jQuery的设计非常优雅,其源代码亦给人以美感,利用jQuery框架写出来的js既简练又能完美跨浏览器.   2.jquery form插件是基于jQuery开发的一套能够利用ajax技术提 ...

  6. C#正则表达式提取HTML中IMG标签中的SRC地址

    百度到的一个,这里就直接贴了 http://blog.csdn.net/smeller/article/details/7108502#comments 一般来说一个 HTML 文档有很多标签,比如“ ...

  7. php PDO简介和操作

    PDO:数据访问抽象层 具有三大特点: 1.可以访问其它数据库  所有数据库都可以 2.具有事务功能 3.带有预处理语句功能(防止SQL注入攻击) <?php //1.造PDO对象 $dsn = ...

  8. 【Mysql】大数据处理优化方法

    1.应尽量避免在 where 子句中使用 != 或  <>  操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 orde ...

  9. VC++ 6.0创建MFC工程时的初级备要点(二)

        在看到一个MFC工程时,可能根据上一篇文章已经知道了哪些是重要的,那些是在创建工程的时候已经被初始化的!!下面介绍一下在看代码的过程的策略!!这里假设创建的基于多对话框的MFC工程名为test ...

  10. redis未授权访问漏洞那拿SHELL

    一.什么是redis未授权访问漏洞: 1.redis是一种文档型数据库,快速高效,存储在内存中,定期才会写磁盘.主要用于快速缓存,数据转存处理等.默认redis开在6379端口,可以直接访问.并不需要 ...