美文网首页
Python Selenium自动化 clear() 失效问题

Python Selenium自动化 clear() 失效问题

作者: 白码会说 | 来源:发表于2020-11-17 22:05 被阅读0次

    Time will tell.

    在使用 Selenium 做 UI 自动化时,发现有些弹出窗上的输入框输入文本后,使用clear()方法无效。

    这样会导致再次输入时,字符串不是清空后再输入,而是跟着在后面输入一长串,导致结果不准。

    经过几次尝试,先click()点击该输入框,再输入,发现还是无效。以下提供两种解决方法:

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

    一、问题描述

    在有些弹出的页面上,输入框输入文本,是可以正常输入的,比如:

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

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

    二、解决方案一

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

    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():
    
        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)
    
    

    运行代码:

    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,只要 selenium 遇到的坑,都可以用 js 去解决。

    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, "悠悠")
    
    

    方法总比问题多,遇到问题可以换个思路,总能找到办法的。好了,今天内容就分享到这里,如果你对更多内容、及Python实例练习题、面试题、自动化软件测试感兴趣可以加入我们175317069一起学习。会有各项学习资源,更有行业深潜多年的技术人分析讲解。

    最后祝愿你能成为一名优秀的软件测试工程师!

    欢迎【评论】、【点赞】、【关注】~

    Time will tell.(时间会证明一切)

    相关文章

      网友评论

          本文标题:Python Selenium自动化 clear() 失效问题

          本文链接:https://www.haomeiwen.com/subject/rnwfiktx.html