富文本定位

Posted ~安妮的_BLOG~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了富文本定位相关的知识,希望对你有一定的参考价值。

通常情况下,输入框一般有三种

一、简单文本输入框

    1.短的input框,如下:

 

input

<input id="zenInput2" class="zenInputDemo" type="text" style="position: static;">

 

这种文本框处理方法很简单,分两步,首先定位到输入框后;然后在输入内容,如下:

driver.find_element_by_id("zenInput2").send_keys(edittile)

    2.textarea框,如下:

textarea

<textarea id="message1" name="message1"></textarea>

这种文本框处理方法和第一种相同,也是分两步,首先定位到输入框后;然后在输入内容,如下:

driver.find_element_by_id("message1").send_keys(edittile)

二、富文本

    1.div式的editor框,如下: 
editor1

这种一样,定位到元素div,直接send_keys就行,不过这个send_keys不是到了‘value’属性中,而是在text中。

# -*- coding: utf-8 -*-

from selenium import webdriver
from time import sleep


driver = webdriver.Firefox()
driver.get(\'http://www.sucaijiayuan.com/api/demo.php?url=/demo/%E5%9F%BA%E4%BA%8Ebootstrap%E7%9A%84%E8%BD%BB%E9%87%8F%E7%BA%A7jQuery%E6%96%87%E6%9C%AC%E7%BC%96%E8%BE%91%E5%99%A8%E6%8F%92%E4%BB%B6%20LineControl/index.html\')
driver.maximize_window()

driver.switch_to.frame(\'iframe\')

driver.find_element_by_class_name(\'Editor-editor\').send_keys(\'Hello world again!\')  # 没什么区别,也是直接send_keys
sleep(2)

print driver.find_element_by_class_name(\'Editor-editor\').text

driver.quit()

  

    2.也可能是更复杂的iframe的editor,如下: 

对于这种复杂的富文本框,首先要跳转到frame中,然后定位,最后再输入内容

# -*- coding: utf-8 -*-

from selenium import webdriver

driver = webdriver.Chrome(executable_path=\'D:\\py\\AutoTestFramework\\drivers\\chromedriver.exe\')
driver.get(\'http://ueditor.baidu.com/website/examples/completeDemo.html\')

driver.switch_to.frame(\'ueditor_0\')  # 注意,这种editor一定有frame,一定要切frame

body_string = """Hello world again again!
Hello world again again!
Hello world again again!

Hello world again again!"""

driver.find_element_by_tag_name(\'body\').send_keys(body_string)  # 直接往frame里的body里填内容,是不是很简单粗暴
print driver.find_element_by_tag_name(\'body\').text
driver.quit()

其实frame editor的内容一般都是写在里面的body里,最重要的就是切到frame中去,frame中一般是一个空的html,其中显示的内容即是body中的内容。

还有一个比较常规的方法来处理这种复杂的富文本:

用firebug显示页面结构

1.这里定位编辑正文是定位上图的红色框框位置 body 部分,也就是id=tinymce
2.定位到之后,直接 send_keys()方法就可以输入内容了
3.有些小伙伴可能输入不成功,可以在输入之前先按个 table 键,send_keys(Keys.TAB)
参考代码如下:

# coding:utf-8
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
profileDir=r\'C:\\Users\\Gloria\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\1x41j9of.default\'
profile = webdriver.FirefoxProfile(profileDir)
driver = webdriver.Firefox(profile)
bolgurl = "http://www.cnblogs.com/"
yoyobolg = bolgurl + "yoyoketang"
driver.get(yoyobolg)
driver.find_element_by_id("blog_nav_newpost").click()
time.sleep(5)
edittile = u"Selenium2+python 自动化-富文本"
editbody = u"这里是发帖的正文"
driver.find_element_by_id("Editor_Edit_txbTitle").send_keys(edittile)
driver.switch_to.frame("Editor_Edit_EditorBody_ifr")
driver.find_element_by_id("tinymce").send_keys(Keys.TAB)
driver.find_element_by_id("tinymce").send_keys(editbody)

以上是关于富文本定位的主要内容,如果未能解决你的问题,请参考以下文章

JS周刊#405 - 精通模块化 JS,Parcel 1.10.0 发布,Trix 1.0 富文本编辑器,创建虚拟鸟类的簇拥行为

富文本编辑器特性

轻量级富文本编辑器quill editor结合iview的使用

python-selenium -- 富文本框操作

将光标定位在 RichEdit 控件中文本的末尾

BEM 和布局富文本