Selenium中怎样解决输入框带有readonly属性或存在日历框问题
Selenium中怎样解决输入框带有readonly属性或存在日历框问题
在学习Selenium WebDriver API时,我们通常会遇到带有readonly属性的输入框或日历框(如下图),这时我们不能直接对这些类型的输入框模拟按键输入我们想要的数据。
带有readonly属性的输入框
日历框
解决方案1 常规思维
可以多定位几次元素,点击元素,但是这样比较繁琐,在某些情况下不能用,比如下拉框选项下面还存在选项,这样就可能出现不能定位的问题;日历框使用点击的方式也不灵活,直接输入时间会更加方便。
解决方案2 使用js代码去掉readonly属性
先定位到元素,然后用removeAttribute(“readonly”)方法删除属性
在别人的博客中大多都是使用js代码定位元素并去除readonly属性
例如:
js = 'document.getElementById("train_date").removeAttribute("readonly");
driver.execute_script(js)
由于本人不怎么了解js代码,对webdriver定位元素比较熟悉,所以查看了selenium调用js代码的一些博客,先用webdriver定位元素,再用js代码去掉readonly属性。
pag=driver1.find_element_by_xpath('//*[@id="pane-first"]/div/div/ul/li[2]/ul/li[1]')
driver1.execute_script("arguments[0].removeAttribute('readonly')",pag)
解决方案3 js方法输入日期
其实很简单,直接改掉输入框元素的value值就可以
driver1.execute_script('arguments[0].value="100条/页"',pag)