前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >selenium+python自动化99-clear()失效问题解决

selenium+python自动化99-clear()失效问题解决

作者头像
上海-悠悠
发布2019-09-16 15:14:18
1.4K0
发布2019-09-16 15:14:18
举报
文章被收录于专栏:从零开始学自动化测试

前言

在使用selenium做UI自动化的时候,发现有些弹出窗上的输入框,输入文本后,使用clear()方法无效。 这样会导致再次输入时,字符串不是清空后输入,而是跟着后面输入一长串,导致结果不准。 经过几次尝试,先click()点击该输入框,再输入,发现还是无效,最终有以下2种方法可以解决

  • 使用双击输入框后,全选文本再输入就可以了
  • 使用js清空输入框文本

问题描述

在有些弹出的页面上,输入框输入文本,是可以正常输入的,比如我第一次输入测试数据:yoyo

第二次,我想换个测试数据,先clear,再输入文本:悠悠

结果清空文本框无效,两次输入的字符串是累加的

方法1:双击输入框

先封装双击元素方法写到base.py文件

代码语言:javascript
复制
from selenium.webdriver.support.ui import WebDriverWait
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.select import Select
import time

class Base():
    # # 作者:上海悠悠,QQ交流群:750815713

    def __init__(self, driver):
        self.driver = driver

    def find(self, locator):
        '''查找元素,loctor = ("id", "kw")'''
        element = WebDriverWait(self.driver, 30, 1).until(EC.presence_of_element_located(locator))
        return element

    def click(self, locator):
        '''点击元素'''
        self.find(locator).click()

    def double_click(self,locator):
        '''双击事件'''
        element = self.find(locator)
        ActionChains(self.driver).double_click(element).perform()

    def send(self, locator, text):
        '''发送文本'''
        self.find(locator).send_keys(text)

运行代码

代码语言:javascript
复制
# 作者:上海悠悠,QQ交流群:750815713

driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
baidu = Base(driver)
# 输入框
loc = ("id", "kw")
baidu.send(loc, "yoyo")
time.sleep(3)
# 方法一:双击
baidu.double_click(loc)
# 重新输入
baidu.send(loc, "上海-悠悠")

双击之后,不用清空,重新输入就可以了

方法2:JS清空文本框

第二种解决思路,可以用万能的js,只要selenium遇到的坑,都可以用js去解决。

代码语言:javascript
复制
# 作者:上海悠悠,QQ交流群:750815713
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
baidu = Base(driver)
# 输入框
loc = ("id", "kw")
baidu.send(loc, "yoyo")
time.sleep(3)
# # 方法一:双击
# baidu.double_click(loc)
# # 重新输入
# baidu.send(loc, "上海-悠悠")

# 方法二:万能的js
js = 'document.querySelector("#kw").value="";'
driver.execute_script(js)
baidu.send(loc, "上海-悠悠")

方法总比问题多,遇到问题,别总去解决为什么不能clear(),换个思路总能找到解决办法!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 问题描述
  • 方法1:双击输入框
  • 方法2:JS清空文本框
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档