测试人社区

学习selenium执行javascript脚本的课程时遇到的疑问。无法成功设置出发日期

环境

Win10,Chrome

问题描述

学习这节课的时候,按照视频里的代码偶尔会无法修改12306的出发日期(隐式等待已设置),例如我想要2020-12-31,执行结果不报错但日期修改失败。

image

后来我尝试每次先点击到往返窗口再点回单程,则100%可以设置我想要的日期。

疑问:
1.为什么直接设置日期会不成功?
2.请问有没有更好的办法处理这种情况?

    def test_12306(self):
        self.driver.get('https://www.12306.cn/index/')
        # 疑问:这里要点击一下往返再点回单程才能让js脚本100%执行成功,如果不这样操作,则有一定几率执行完成但日期仍然没被修改
        self.driver.find_element(By.XPATH, '//div[@class="search-tab-hd"]//a[text()="往返"]').click()
        self.driver.find_element(By.XPATH, '//div[@class="search-tab-hd"]//a[text()="单程"]').click()
        # 获取出发日期控件的元素并移除readonly属性
        # date=self.driver.find_element_by_id('train_date')
        # self.driver.execute_script(
        #     "var a=arguments[0];a.readonly = false;a.value='2020-12-31'",date)

        self.driver.execute_script(
            "a=document.getElementById('train_date');a.removeAttribute('readonly')")
        # 重新赋予元素新日期
        self.driver.execute_script("a.value='2020-12-31'")
        sleep(3)  # for observe
        print(self.driver.execute_script("return document.getElementById('train_date').value"))

image

试下这个代码

        driver = webdriver.Chrome()
        driver.get("https://www.12306.cn/index/")
        driver.maximize_window()
        driver.execute_script("document.getElementById('train_date').value='2020-3-25'")
        print(driver.execute_script("return document.getElementById('train_date').value"))
        sleep(3)
        driver.quit()

谢谢,尝试了上面的代码,结果差不多,第一次可以修改。再跑多次日期不会修改,除非点一次往返标签再点回来。