web自动中定位不到元素之框架切换

定位元素时总是失败,F12查看页面代码时发现进入了不同的框架,那么在一个框架中需要定位另外一个框架的元素时,就要先切换框架,然后进行页面的常规操作。

方法一:找到每个框架唯一的元素定位,再进行准确切换

ele = (By.XPATH, '//*[@id="tab390010106"]//iframe')
self.normal_click(ele, model="点击iframe框架 ")
iframe_ele = self.find_element(ele, model="切换iframe框架 ")
self.driver.switch_to.frame(iframe_ele)

方法二:每次都返回默认的框架,默认框架是第一个,打开的其他框架就是第二个,这样就可以直接切换到第二个框架

self.driver.switch_to.default_content()
view_details_iframe = self.find_element((By.XPATH, '(//*[@id="ifmain"])[2]'), '定位第二个iframe元素')
self.switch_iframe(view_details_iframe)

方法三:存在多个iframe,当页面跳转时则需要传入iframe的src值。

写一个跳转iframe的公共方法,方法调用在page页面的init中完成。后续的page 方法就可以省略跳转相关的内容了。一劳永逸 nice!

# action
def __init__(self, selenium_driver):
    super().__init__(selenium_driver)
    src = "/erp/jsp/ehr/emp/empManage.jsp"
    self.EHR_switch_iframe(src)
    self.on_page(self.PUF)
# EHR系统存在多个iframe,当页面跳转时则需要传入iframe的src值
def EHR_switch_iframe(self, frame_src):
    # 等待 iframe 存在
    self.driver.switch_to.default_content()
    self.logger.info('iframe 切换操作:')
    self.driver.switch_to.default_content()
    all_iframe = self.find_elements((By.XPATH, "//*[@id='ifmain']"))
    for i in range(0, len(all_iframe)):
        if frame_src in all_iframe[i].get_attribute("src"):
            self.driver.switch_to.frame(all_iframe[i])
            self.logger.info("已切换到目标iframe")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值