不知道你们在使用ui框架编写12306时,有没有遇到过这样的问题.

在使用selenium去编写场景时发现出发地这个input标签,每次都没办法按照你的预期去修改值

selenium interceptor_request 修改请求参数 python selenium修改input的value值_定位


例如:

selenium interceptor_request 修改请求参数 python selenium修改input的value值_python_02


首先在浏览器里使用document发现完全可以修改掉输入框的值.然后兴致勃勃的 使用webdriver来加载js语法

from_stat_js = """
    var a= document.getElementById("fromStationText")
        a.value='蚌埠南'
    
    """
self.driver.execute_script(self.from_stat_js)

然后运行!

selenium interceptor_request 修改请求参数 python selenium修改input的value值_定位_03


没错!!报错了.js加载失败 ,!!让你摸不着头脑,然后我不信!

selenium interceptor_request 修改请求参数 python selenium修改input的value值_python_04


然后,我就把出发,到达,和点击查询,全部使用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次的原则,我从新执行了一遍.发现,没错!!!什么都没动!!也没报错!!但是,出发地变的不对了!!

selenium interceptor_request 修改请求参数 python selenium修改input的value值_selenium_05


selenium interceptor_request 修改请求参数 python selenium修改input的value值_selenium_06


然后我开始疯狂打断点,一点一点运行.发现.断点调试没有任何问题.每次都是我输入的出发地和到达地.

那么问题到底出在哪里了呢?究竟发生了什么灵异事件,导致了输入文本不一致呢???
在我无法找到问题的时候,我使用了强制等待

time.sleep(12)

没错,你没看错,我强制等待了12秒!每一步,以保证每次运行,我都能看的清楚!

然后…我发现了问题所在

selenium interceptor_request 修改请求参数 python selenium修改input的value值_输入框_07


没错!!每次都被输入框里的文本给影响了…输入的值没有了.只剩下了回车键!!!所以默认选了第一个北京北!

既然找到了原因!那么接下来.就先把输入框文本清除掉,然后输入值,然后在下一步

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)

selenium interceptor_request 修改请求参数 python selenium修改input的value值_selenium_08


程序写入正确了!