51Testing软件测试论坛

标题: 登录qq邮箱无法定位到“写信”这个元素 [打印本页]

作者: virginia_shi    时间: 2017-5-12 15:05
标题: 登录qq邮箱无法定位到“写信”这个元素
测试环境: Firefox 48.0.2 + selenium3.3.1+python3.6.1

# coding=utf-8
from selenium import webdriver
import time
driver=webdriver.Firefox()
driver.get("https://mail.qq.com/")

driver.switch_to.frame("login_frame")
driver.find_element_by_id("switcher_plogin").click()
driver.find_element_by_id("u").clear()
driver.find_element_by_id("u").send_keys("807673920")
driver.find_element_by_id("p").clear()
driver.find_element_by_id("p").send_keys("password")
driver.find_element_by_id("login_button").click()

#time.sleep(3)
# driver.switch_to.frame("actionFrame")
driver.find_element_by_id("composebtn").click()

运行到最后一行就提示找不到composebtn这个元素,考虑到有可能是表单切换,我用最笨的方法把所有iframe 的id都找出来(osslog_iframe,mainFrame,leftFrame,actionFrame),试着切换到这几个frame还是提示找不到元素,同时提示找不到frame.
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [id="actionFrame"]
selenium.common.exceptions.NoSuchFrameException: Message: actionFrame


怕登录之后load时间不够长,我设置了等待时间,还是提示找不到元素 :
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [id="actionFrame"]
During handling of the above exception, another exception occurred:
selenium.common.exceptions.WebDriverException: Message: can't access dead object



有没有大神帮忙看看到底是什么问题呢,不胜感激!!!



作者: 周京城    时间: 2017-5-12 15:51
你自动化里有选择页面那个代码吗?你跳转页面了,需要切换页面在定位啊
作者: pengliangrong    时间: 2017-5-12 16:35
使用xpath一层层的来定位,从顶部元素一层层的找下来就行
driver.find_element_by_xpath("/div[@id='resize']/div[5]/div/ul/li/input").click()
作者: virginia_shi    时间: 2017-5-12 17:09
周京城 发表于 2017-5-12 15:51
你自动化里有选择页面那个代码吗?你跳转页面了,需要切换页面在定位啊

页面跳转了但是是同一个窗口,我用all_handles=driver.window_handles 查看窗口句柄一直只有一个并且是同一个。所以应该不需要切换从窗口吧。
作者: 掉渣饼    时间: 2017-5-15 09:28
我觉得你报错的原因是在于composebtn元素不在login_frame下面,导致报错,所以当你切换页面后,需要先跳出login_frame,你可以在driver.find_element_by_id("login_button").click()后面加上driver.switch_to_default_content()
作者: virginia_shi    时间: 2017-5-15 10:11
掉渣饼 发表于 2017-5-15 09:28
我觉得你报错的原因是在于composebtn元素不在login_frame下面,导致报错,所以当你切换页面后,需要先跳出l ...

你的思路太正确了,我试了下,只要跳出了原来的frame就能找到元素了。以后switch frame 之后一定要记得退出。谢谢谢~~~
作者: lamecho    时间: 2017-6-1 15:17
建议了解pyswat框架,全程录制案例,不需要手写代码,自动生成测试case,回放即可实现自动化测试




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2