不知道你们在使用ui框架编写12306时,有没有遇到过这样的问题.
在使用selenium去编写场景时发现出发地这个input标签,每次都没办法按照你的预期去修改值
例如:
首先在浏览器里使用document发现完全可以修改掉输入框的值.然后兴致勃勃的 使用webdriver来加载js语法
from_stat_js = """
var a= document.getElementById("fromStationText")
a.value='蚌埠南'
"""
self.driver.execute_script(self.from_stat_js)
然后运行!
没错!!报错了.js加载失败 ,!!让你摸不着头脑,然后我不信!
然后,我就把出发,到达,和点击查询,全部使用js来加载…
就没有然后了…我们来看第二个
列如2:
既然js使用不了,那肯定很多人跟我的想法一样,第一时间又想到了selenium里面的键盘库,KEYS
wait(self.driver, self.query)
self.driver.find_element(*self.form_stat).send_keys(from_name, Keys.ENTER)
这个地方逻辑就是,先定位元素,然后send_keys是输入值,然后利用键盘回车,模拟出真是场景来跳到下一个输入框!
没错!这个方法我在第一次尝试的使用成功了!但是,本着自动化最少成功5次的原则,我从新执行了一遍.发现,没错!!!什么都没动!!也没报错!!但是,出发地变的不对了!!
然后我开始疯狂打断点,一点一点运行.发现.断点调试没有任何问题.每次都是我输入的出发地和到达地.
那么问题到底出在哪里了呢?究竟发生了什么灵异事件,导致了输入文本不一致呢???
在我无法找到问题的时候,我使用了强制等待
time.sleep(12)
没错,你没看错,我强制等待了12秒!每一步,以保证每次运行,我都能看的清楚!
然后…我发现了问题所在
没错!!每次都被输入框里的文本给影响了…输入的值没有了.只剩下了回车键!!!所以默认选了第一个北京北!
既然找到了原因!那么接下来.就先把输入框文本清除掉,然后输入值,然后在下一步
def input_winds(self, stat_name, end_name):
""" 这里建议拆分开来写,不然会出现某些动作同时执行,导致报错"""
# 隐形等待,等待元素出现,这里是我自己封装的方法
wait(self.driver, self.query)
# 这里加的强制等待,可加可不加,为了好定位我才加的
time.sleep(2)
# 这里获取到的是Webdriver对象
a = self.driver.find_element(*self.from_stat)
# 清除输入框
a.clear()
# 等待1s
time.sleep(1)
# 再次填写出发地
a.send_keys(stat_name)
# 在等待
time.sleep(1)
# 回车键
a.send_keys(Keys.ENTER)
time.sleep(2)
程序写入正确了!