上一篇我们讲述了特殊元素的操作方法,本篇接着讲一些可能遇到的其它操作方法。
如frame操作。
Frame 标签有Frameset、Frame、Iframe 3种,Frameset可以直接照常进行元素定位。Frame、Iframe需要驱动切换到对应的frame才可以定位到。否则 ,会报错。
1、直接定位frame内元素
如下以163邮箱为例
driver **= **self.driver
driver.get(**"https://mail.163.com/"**)
driver.maximize_window()
*#定位用户名输入框
*driver.find_element_by_xpath(**"//*[@class='j-inputtext dlemail j-nameforslide']"**).send_keys(**"zhwzh0311"**)
time.sleep(3)
这样执行报错:定位不到元素
2、驱动跳转到对应frame
frame 默认使用id、name定位的,看下面iframe 没有固定id,
这个可以使用8大定位方法,tagname定位
<iframe name="" frameborder="0" id="x-URS-iframe1722999269216.9436" scrolling="no" style="width: 100%; height: 100%; border: none; background: none;" src="https://dl.reg.163.com/webzj/v1.0.1/pub/index_dl2_new.html?cd=%2F%2Fmimg.127.net%2Fp%2Ffreemail%2Findex%2Funified%2Fstatic%2F2024%2F%2Fcss%2F&cf=urs.163.918051fb.css&MGID=1722999269216.9436&wdaId=&pkid=CvViHzl&product=mail163"></iframe>增加跳转,就可以解决上面报错的问题:
*#切换frame,对应iframe没有固定id,*
driver.switch_to.frame(driver.find_element('tag name', 'iframe'))
driver**= **self.driver
driver.get(**"https://mail.163.com/"**)
driver.maximize_window()
*#切换frame,对应iframe没有固定id
*driver.switch_to.frame(driver.find_element(**'tag name'**, **'iframe'**))
*#定位用户名输入框
*driver.find_element_by_xpath(**"//*[@class='j-inputtext dlemail j-nameforslide']"**).send_keys(**"zhwzh0311"**)
time.sleep(3)
上面的代码驱动已经切换到frame内部,返回的话用:
driver. switch_to.default_content()
如下面代码,返回驱动后就定位不到了。如下图所示。
*#切换frame,对应iframe没有固定id
*driver.switch_to.frame(driver.find_element(**'tag name'**,**'iframe'**))
*#定位用户名输入框
*driver.find_element_by_xpath(**"//*[@class='j-inputtext dlemail j-nameforslide']"**).send_keys(**"zhwzh0311"**)
time.sleep(3)
driver.switch_to.default_content()
driver.find_element_by_xpath(**"//*[@class='j-inputtext dlemail j-nameforslide']"**).send_keys(**"zhwzh0311"**)
以上就是frame内元素定位方法。当我们看到定位失败的情况下,可以考虑是不是元素在frame内需要切换即可。
每天进步一点点,加油!
版权归原作者 立黄昏粥可温 所有, 如有侵权,请联系我们删除。