直接上流程:
1、开始登录
?2、点击我的私海
?3、切入frame层
发现此时frame的路径为:/html/body/div[5]/div[1]/div[3]/iframe[2]
4、点击客户新增在这里发现也有frame层,但是发现一直无法切入
?5、通过上述两个frame的路径对比,后来才明白第3步、第4步的这两个frame层并不是层层嵌套的意思,需要先退出第3步的frame层,再切入第4步中的frame层。
此时的frame层路径是:
/html/body/div[2]/table/tbody/tr[2]/td[2]/div/table/tbody/tr[2]/td[2]/div/iframe
且在此时发现第3步的frame层路径变为:
/html/body/div[6]/div[1]/div[3]/iframe[2]
6、尝试在第三步与第四步添加退出第三步frame层的代码发现能正确切入了该frame层,但需要通过绝对路径的方式,这点暂时还不是很明白。
7、整体使用代码如下:
# 导入模块
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
# 打开浏览器
driver=webdriver.Chrome()
driver.implicitly_wait(5)
driver.get('http://120.55.190.222:9090/loginController.do?login2')
driver.maximize_window()
# 登录
driver.find_element(By.ID,'userName').send_keys('SQOA001')
driver.find_element(By.ID, 'password' ).send_keys('sqtest')
driver.find_element(By.ID, 'but_login').click()
# 新增客户
driver.find_element_by_css_selector('ul[id="side-menu"]>li:nth-child(3)').click()
driver.find_element_by_xpath('/html/body/div[4]/nav/div[2]/div[1]/ul/li[3]/ul/li[1]/a/span').click()
# 进入frame层
driver.switch_to.frame('iframe1')
driver.find_element_by_id('add').click()
# 退出frame层
driver.switch_to.parent_frame()
# 重新进入另外的frame层
# driver.switch_to.frame('JDG16314320511377') #定位不成功
# driver.switch_to.frame(driver.find_element_by_name('JDG16314320511377')) #定位不成功
#driver.switch_to.frame(driver.find_element_by_css_selector('iframe[name="JDG16314414636411"]')) #定位不成功
driver.switch_to.frame(driver.find_element_by_xpath('/html/body/div[2]/table/tbody/tr[2]/td[2]/div/table/tbody/tr[2]/td[2]/div/iframe')) # 成功切入frame层
# 填写新客户信息
driver.find_element_by_id('aac003').send_keys("1111111")
time.sleep(2)
# 退出
driver.close()
8、自我总结
遇到元素无法定位时先查看是否有frame层;比较frame层的路径,是否为层层嵌入或者并行关系;多次尝试使用其它方法切入?。
|