selenuim操作基于REACT实现的富文本编辑器1

web中大多数的输入框都是<input>标签,但是由于业务中前端有使用到基于REACT实现的富文本编辑器,在实现自动化测试编写时自然会涉及到对富文本器进行操作处理

检查该编辑器的html元素,可以看到和正常的<input>不同,该结构为一个<div>里面裹了个<span>

《selenuim操作基于REACT实现的富文本编辑器1》

而在其中输入文字,则是在改变<span><span>text(),如果有换行的话则生成多个<div><span>

《selenuim操作基于REACT实现的富文本编辑器1》

接下来涉及到使用 selenium 去操作富文本编辑器,seleuim的基本使用就不在本篇进行说明,首先要定位进行输入,普通的<input>一般使用.sned_keys方法轻松实现输入,这里对<div>使用.sned_keys方法仍然可以生效,不过定位<div>时根据html结构需要对最外层<div>进行操作,才可以正常输入 (ps、也可以使用from selenium.webdriver.common.keys import Keys进行键盘操作)

《selenuim操作基于REACT实现的富文本编辑器1》

第二步,涉及到对输入的文字进行删除操作,这一步也是让我感到非常纳闷的地方,正常的<input>自带有.clear()方法,轻松对文字进行清理,但是在这里,无论我是对<div>还是<span>还是最外层的<div>使用clear()方法,在UI界面上能看到文字有被正常清楚,html中的文字也正常被清除,但是一旦的点击保存或者,继续用.sned_keys增加文字,刚才clear的内容就会再次出现。

最后和前端小哥哥讨论,发现可能是REACT框架导致,该框架采用的是view和model绑定的模型,clear操作仅仅清除了view层的内容,实际数据还是存在,所以不能够清除,要想同时清除view和model的话还是需要触发键盘事件

知道了大概原因后,代码就好写很多了,直接seleuim直接定位到<div>,然后根据字符串长度调用键盘删除键send_keys(Keys.BACK_SPACE)

最后贴上很挫的python代码

        content_input = dr.find_element_by_xpath("//div[@role='textbox']")
        content_input.click()
        for key in change_name:
            content_input.send_keys(Keys.BACK_SPACE)

        content_input.send_keys(change_content)
    原文作者:光光光小光光
    原文地址: https://segmentfault.com/a/1190000015651988
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞