项目中遇到了如下图这样的省市区联动的选择框:
selenium定位非select选择框并点击选择元素
首先想到的办法是直接定位【实际展业地址】输入框,用sendkeys填上省市区。
然而查看HTML代码发现,这个输入框有只读属性,selenium没办法直接操作,如下图
selenium定位非select选择框并点击选择元素
那就想办法去掉只读属性,然后再赋值,结果还是不行。
(去掉只读属性的方法见上次那个文章已知元素的xpath路径,运用js去除元素只读属性

手动点击省市区填入数据再查看HTML代码发现,实际展业地址input框的上层还有一个隐藏的input框,在手动选择了省市区后,会把省市区对应的码值赋值给这个隐藏的input框,如图()
selenium定位非select选择框并点击选择元素
那就去掉隐藏属性,用sendkeys给隐藏的input框赋值(方法同上)
结果页面还是有必填项不能为空的校验
selenium定位非select选择框并点击选择元素
后面又折腾了好久,对比鼠标点击前后HTML代码变化,发现还有一个div没有赋值,又给这个div赋值,然而依然没能解决非空校验问题
selenium定位非select选择框并点击选择元素
源码如下,谁需要的可以参考,但是这段代码真的是,一顿操作猛如虎,定睛一看原地杵????
selenium定位非select选择框并点击选择元素
由于刚开始学习,加上看不到页面源码,不知道这个框的非空判断在哪,网上搜了好久没能解决,最终放弃了这个方案。
第二个方案是尝试用selenium模拟鼠标操作,直接点击页面元素,但是莫名其妙的各种报错,代码不贴了感兴趣的可以自己试试。
第三个方案就是直接用js操作页面元素,代码如下
selenium定位非select选择框并点击选择元素

这里需要注意的是,省市区联动的三个框,因为有先后顺序,点了省才能出现市,有了市才有区,所以在点击操作后需要强制等待1秒钟,等相应的市和区显示出来再进行下一步定位和操作,否则会报错。
操作完后再试发现非空校验通过了,真是喜极而泣呀,折腾了一周多终于好使了。
不过这里也有点问题,就是作为脚本来执行可以完成页面操作,但是以后做自动化,不同的省市区元素的位置不同,js肯定需要参数化,不知道这个难度怎么样,以后慢慢学习到了再看吧。或许慢慢学习多了还能发现更多的实现方案。

相关文章: