解决python--UI自动化iframe切换问题

最近同事在学Python+selenium UI自动化,遇到一些问题,其中有个涉及iframe切换的问题,记录下方面有需要的人可以参考查阅
在这里插入图片描述
从他问题描述和代码,代码思路清晰,自己打开https://www.126.com/ 网址

在这里插入图片描述
发现这个需要先点击登入密码,所以,他的代码少了一个动作,点击 密码登入 的操作,这个简单,加一个点击密码登入的代码操作就行

#点击 密码登入

driver.find_element_by_id("switchAccountLogin").click()

然后进入用户密码登入界面
在这里插入图片描述

【问题】
加上点击密码登入,进入用户密码登入页面,接着直接执行上面的代码,会提示元素定位不到
在这里插入图片描述
1:以为是元素没加载出来,加了延时sleep()、显式等待都不行

2:然后想着是否定位出了问题
换了 xpath 定位 、 相对定位、 css定位、 find_elements_by_tag_name 、find_elements_by_class_name ,都不行,一样报找不到元素 ,

没用 id 元素定位,因为 id是动态id,肯定不行
在这里插入图片描述

然后想到可能是iframe的问题,细心查看下,果然是:
在这里插入图片描述
用户登入输入框在不在当前iframe,需要切换到这个iframe里面才能操作

问题找到了:接就是怎么切换到这个iframe了,发现这个iframe元素没有 classs,有name但没值
id 也是动态的,怎么定位好呢??
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ok,方法是有的, 我们在这通过 by_tag_name 方法定位到iframe进行切换

driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))

切换换,再执行,OK好了,元素能定位到了,输入框成功执行了输入操作
在这里插入图片描述

PS:附上代码

#!/usr/bin/python
#-*- coding:utf-8 -*-

from selenium import webdriver
from time import sleep
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions

option = webdriver.ChromeOptions()
option.add_argument('disable-infobars')
driver = webdriver.Chrome(chrome_options=option)
driver.maximize_window()
driver.get("http://www.126.com")
sleep(5)
#点击密码登入
driver.find_element_by_id("switchAccountLogin").click()
sleep(5)

#切换iframe
driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))

#元素定位,by id/name/class
# driver.find_element_by_name("email").send_keys("urer")

#显式等待元素出现再执行操作
# element = WebDriverWait(driver,10).until(expected_conditions.visibility_of(driver.find_element_by_xpath('//*[@id="login-form"]/div/div[1]/div[2]/input')))
# element.send_keys("123")

#xpath定位
# driver.find_element_by_xpath('//*[@id="login-form"]/div/div[1]/div[2]/input').send_keys('123')
driver.find_element_by_xpath("//input[@placeholder='邮箱帐号或手机号码']").send_keys("user")

#相对定位
# element=driver.find_element_by_xpath('//*[@id="login-form"]')
# element.find_element_by_xpath("./div/div[1]/div[2]/input").send_keys('abc')

以上有不同的定位方式, 元素定位,相对定位 ,xpath定位 等

PS:补充
在这里插入图片描述
参考https://www.cnblogs.com/yaoze2018/p/10403691.html

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值