webdriver'在缓存中找不到元素,也许页面已更改'[webdriver] [python]

时间:2013-05-22 23:22:46

标签: python selenium webdriver

我创建了一个测试来创建故障单。当我点击“新票”时,会弹出一个弹出窗体。我填写标题和正文,然后点击“保存并新建”。此时我创建了一个循环。当我<10时,重复测试。我可以到第一张票,但在第二张票中,它只是退出并说出我的标题中的错误。我已经到了几乎开始第二张票的地步,但它输入了错误区域的文本,我不明白。它在我的“标题”上方的字段中输入文本。我也有基于ID的send_keys。这是代码:

while i<2:  
            driver.implicitly_wait(10)
            title = f.name()
            driver.find_element_by_name('txtsummary')
            driver.find_element_by_name('txtsummary').send_keys(title)
            driver.find_element_by_name('txtcontactorg').send_keys('unnamed')
            body = f.name()       
            page = driver.find_elements_by_xpath('//td[@class="mceIframeContainer mceFirst mceLast"]/iframe')[1]
            page.click()
            page.send_keys(body)           
            driver.find_element_by_xpath('//span[text()="Save and New"]').click()   

如果我取出隐式等待,它会在保存第一个文本后立即输入文本到错误的框中。如果我把它留在里面,它就会等待10秒钟然后关闭。我的第一张票总是被创建,并且它总是需要永远而不是下一张票的失败。我的意思是,在我的最后一行代码中,save和new,该行运行需要8秒,而它应该在发送正文后立即执行。我觉得这是一个因素。

1 个答案:

答案 0 :(得分:4)

我认为问题与您选择iframe的事实有关。进入iframe后,无法重新找到'txtsummary'

发生这种情况的原因是,只要您点击iframe,焦点就会更改为'txtsummary'不存在的位置。将焦点返回到最顶部的帧插入。

driver.switch_to_default_content()

位于循环的顶部,每次循环运行时,它都将从最顶层开始。