操作富文本框

富文本框常见的技术用到了Frame标签,并且在Frame里面实现了一个完整的HTML网页结构。

方法一:

#!usr/bin/env python
#-*- coding:utf-8 -*-
"""
@author:   sleeping_cat
@Contact : [email protected]
"""
#操作富文本框

from selenium import webdriver
import unittest,traceback,time
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):
        self.driver = webdriver.Firefox()

    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("xxxx")
            passWord = self.driver.find_element_by_xpath                (‘//input[@placeholder = "请输入您的密码:"]‘)
            passWord.clear()
            passWord.send_keys("xxxx")
            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("xxxx")
            subject = self.driver.find_element_by_xpath                (‘//input[@ng-model = "mail.subject"]‘)
            subject.send_keys("测试邮件")
            # 获取邮件正文编辑区域的iframe页面元素对象
            iframe = self.driver.find_element_by_xpath(‘//iframe[contains(@id,"ueditor_0")]‘)
            self.driver.switch_to.frame(iframe)#通过.switch_to.frame()方法切换进入富文本框中
            # 获取富文本框中编辑页面元素对象
            editBox = self.driver.find_element_by_xpath("/html/body")
            editBox.send_keys("邮件的正文内容")
            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("邮件发送成功")
        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()
‘‘‘
优点:实现简单,只要调用WebDriver对页面元素对象提供的send_keys()方法,即可实现内容输入
缺点:必须能定位到要被操作元素,对脚本编写人员的定位能力要求比较高,同时不支持HTML格式的内容输入
‘‘‘

方法二:

#!usr/bin/env python
#-*- coding:utf-8 -*-
"""
@author:   sleeping_cat
@Contact : [email protected]
"""
#操作富文本框

from selenium import webdriver
import unittest,traceback,time
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):
        self.driver = webdriver.Firefox()

    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("xxxx")
            passWord = self.driver.find_element_by_xpath                (‘//input[@placeholder = "请输入您的密码:"]‘)
            passWord.clear()
            passWord.send_keys("xxxx")
            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("xxxx")
            subject = self.driver.find_element_by_xpath                (‘//input[@ng-model = "mail.subject"]‘)
            subject.send_keys("测试邮件")
            # 获取邮件正文编辑区域的iframe页面元素对象
            iframe = self.driver.find_element_by_xpath(‘//iframe[contains(@id,"ueditor_0")]‘)
            self.driver.switch_to.frame(iframe)  # 通过.switch_to.frame()方法切换进入富文本框中
            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("邮件发送成功")
        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()
‘‘‘
优点:可以支持HTML格式的文字内容作为富文本框的输入内容
缺点:由于各种网页中富文本框实现的机制可能不同,有可能造成定位到富文本框的文本编辑区对象比较困难,此时就需要熟练了解HTML代码含义以及Frame的进出方式,对脚本编写人员的能力要求就比较高
‘‘‘

方法三:

#!usr/bin/env python
#-*- coding:utf-8 -*-
"""
@author:   sleeping_cat
@Contact : [email protected]
"""
#操作富文本框

from selenium import webdriver
import unittest,traceback,time
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):
        self.driver = webdriver.Firefox()

    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("xxxx")
            passWord = self.driver.find_element_by_xpath                (‘//input[@placeholder = "请输入您的密码:"]‘)
            passWord.clear()
            passWord.send_keys("xxxx")
            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("xxxx")
            subject = self.driver.find_element_by_xpath                (‘//input[@ng-model = "mail.subject"]‘)
            subject.send_keys("测试邮件")
            subject.send_keys(Keys.TAB)
            setText("邮件正文内容")
            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("邮件发送成功")
        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()
‘‘‘
优点:不管何种类型的富文本框,只要找到它上面的紧邻元素,然后通过模拟按Tab键的方式均可进入到富文本框中,由此可以使用一种方法解决所有类型的富文本框定位问题
缺点:不能在富文本框编辑器中进行HTML格式的内容输入
‘‘‘

原文地址:https://www.cnblogs.com/sleeping-cat/p/8278530.html

时间: 2024-11-19 00:39:49

操作富文本框的相关文章

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

富文本框的技术实现和普通的文本框的定位存在较大的区别,富文本框的常见技术用到了Frame标签,并且在Frame里面实现了一个完整的HTML网页结构,所以使用普通的定位模式将无法直接定位到富文本框对象. 方法一:调用WebDriver的send_key()方法实现 #encoding=utf-8 from selenium import webdriver import unittest, time, traceback from selenium.webdriver.support.ui imp

python-selenium -- 富文本框操作

一.div普通文本 百度搜索框,通过.send_keys()方法 #定位百度搜索框 driver.find_element_by_id("kw").send_keys("python") time.sleep(3) driver.find_element_by_id("su").click() 二.textarea富文本框 博客园评论区,通过js的.value 方法 from selenium import webdriver import ti

轻量级web富文本框——wangEditor使用手册(2)——扩展一个“缩进”功能

1. 引言 上一节<轻量级web富文本框——wangEditor使用手册(1)——基本应用>中我们讲解了如何应用wangEditor创建最基本的富文本编辑器,本节继续讲如何扩展一个简单的按钮.本节是继续上一节的内容来的,所使用的代码也是接着上一节的来的,错过的朋友请先看上一节,再看本节. 下载地址:https://github.com/wangfupeng1988/wangEditor demo演示:http://www.cnblogs.com/wangfupeng1988/p/4185508

基于bootstrap的富文本框——wangEditor【欢迎加入开发】

先来一张效果图: 01. 引言 老早就开始研究富文本框的东西,在写完<深入理解javascript原型与闭包>之后,就想着要去做一个富文本框的插件的例子. 现在网络上开源的富文本框插件非常多,一搜索一大堆,但是基于bootstrap的还不多,现在只有一个“bootstrap-wysiwyg”,老外写的,没有一个汉字,大家可以fork一下源码看看,写的非常简洁,压缩之后不到10KB,非常厉害!我也还没来得及研究,一定要看一下. 02. wangEditor 老外的东西,满地英文,给程序猿用着还可

轻量级web富文本框——wangEditor使用手册(4)——配置下拉菜单

1. 引言 上一节(第三节)<轻量级web富文本框——wangEditor使用手册(3)——如何自定义配置菜单>描述了如何自定义配置一个新加入的菜单.在第二节中我们演示了如何添加一个简单的菜单,这一节我们要加入一个稍微复杂一点的菜单——下拉菜单类型——增加一个“设置标题”下拉按钮 下载地址:https://github.com/wangfupeng1988/wangEditor demo演示:http://www.cnblogs.com/wangfupeng1988/p/4185508.htm

基于bootstrap的富文本框——wangEditor【欢迎增加开发】

先来一张效果图: 01. 引言 老早就開始研究富文本框的东西,在写完<深入理解javascript原型与闭包>之后,就想着要去做一个富文本框的插件的样例. 如今网络上开源的富文本框插件许多,一搜索一大堆,可是基于bootstrap的还不多.如今仅仅有一个"bootstrap-wysiwyg".老外写的,没有一个汉字.大家能够fork一下源代码看看,写的很简洁.压缩之后不到10KB.很厉害!我也还没来得及研究,一定要看一下. 02. wangEditor 老外的东西,满地英文

轻量级web富文本框——wangEditor使用手册(3)——如何自定义配置菜单

1. 引言 上一节<轻量级web富文本框——wangEditor使用手册(2)——扩展一个“缩进”功能>最后提到,新建的菜单不能只是默认放在菜单的后面,应该可以自定义的放在当前菜单栏中的任何位置.这一节就讲述wangEditor目前支持的几种自定义配置菜单的使用. 下载地址:https://github.com/wangfupeng1988/wangEditor demo演示:http://www.cnblogs.com/wangfupeng1988/p/4185508.html 交流QQ群:

selenium处理富文本框,日历控件等 调用JS修改value值

http://blog.csdn.net/fudax/article/details/8089404 document.getElementById("js_domestic_fromdate").value = "2014-10-10" selenium处理富文本框,日历控件等 调用JS修改value值,布布扣,bubuko.com

[布局]记录部件字段富文本框如何设置统一高度

在使用快速开发平台构建业务功能中,往往都会用到记录部件,如何布局各个字段位置使用户一目了然,往往就是我们头大的问题.在一个固定大小的窗体下,各个字段的样式都是系统自动默认的,如下图: 此种布局方式真是惨不忍睹,那么如何布局多个富文本字段的位置才能使界面简单明了呢?今天为大家带来记录部件中富文本框(数据表中字段编辑类型word)的布局方法:首先在 空白区域鼠标右键唤出菜单[定制版面],单击进入[记录部件布局定制]模式: 选中富文本字段,鼠标右键点击[创建群组]: 群组创建完成,在顶部空白区域右键唤