参考链接

web自动化,准备模拟一个修改名称的操作,想的是定位都输入框元素,然后使用clear()方法清空输入框内容,再重新输入一些内容

结果实际上发现并没有清空输入框内容,而是直接在输入框后面追加了(这里就可以确定元素肯定是定位到了的)

clear()方法为什么会失效不得而知,在网上搜索了一大圈也没看到有人解释说为什么会没起作用(好想知道为什么不起作用……)

解决办法:

总得来说有三个解决思路

一:双击输入框,然后重新输入内容(不靠谱)

需要导入 from selenium.webdriver import ActionChains

二:通过键盘全选,即模拟发起ctrl+a,然后重新输入内容(简单,推荐使用)

需要导入 from selenium.webdriver.common.keys import Keys

三:通过万能的js直接定位到元素然后将元素的value值清空(需要了解一定的js语法,如果要做好web自动化,js多少也需要掌握点)

下面是以上三种方法的代码实现

ele = driver.find_element_by_xpath('//*[@>)
# 方法一:双击输入框,再输入新的内容
ActionChains(driver).double_click(ele).perform()
ele.send_keys('尝试双击修改')

# 方法二:通过键盘全选,然后直接输入新的内容,就不用clear了
ele.send_keys(Keys.CONTROL, 'a')
ele.send_keys('通过键盘全选达到清空效果,再输入')

# 方法三:万能的js
# 这种execute_script()的用法还需要学习
driver.execute_script("arguments[0].value = '';", ele)

price = 249900
driver.execute_script('arguments[0].value="{}";'.format(price), ele)

# 也可以通过css选择器选取元素再把value清空
driver.execute_script('document.querySelector("#data-assets-modules > div:nth-child(3) > div > div.el-dialog__body > form > div > div > div > input").value=""')
ele.send_keys('通过js清空输入框')

elem = driver.find_element(By.XPATH, "//*[@id='negotiatedValue']")

 

相关文章:

  • 2021-04-29
  • 2022-12-23
  • 2021-04-22
  • 2021-07-18
  • 2022-02-25
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-08-03
  • 2022-01-15
  • 2022-12-23
  • 2023-03-21
  • 2021-07-01
相关资源
相似解决方案