前言
在使用selenium做UI自動化的時候,發現有些彈出窗上的輸入框,輸入文本后,使用clear()方法無效。
這樣會導致再次輸入時,字符串不是清空后輸入,而是跟着后面輸入一長串,導致結果不准。
經過幾次嘗試,先click()點擊該輸入框,再輸入,發現還是無效,最終有以下2種方法可以解決
- 使用雙擊輸入框后,全選文本再輸入就可以了
- 使用js清空輸入框文本
問題描述
在有些彈出的頁面上,輸入框輸入文本,是可以正常輸入的,比如我第一次輸入測試數據:yoyo
第二次,我想換個測試數據,先clear,再輸入文本:悠悠
結果清空文本框無效,兩次輸入的字符串是累加的
方法1:雙擊輸入框
先封裝雙擊元素方法寫到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():
# # 作者:上海悠悠,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)
運行代碼
# 作者:上海悠悠,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去解決。
# 作者:上海悠悠,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(),換個思路總能找到解決辦法!