有时候我们在定位一个页面元素的时候发现一直定位不了,反复检查自己写的定位器没有任何问题,代码也没有任何问题。这时你就要看一下这个页面元素是否在一个iframe中,这可能就是找不到的原因之一。如果你在一个default content中查找一个在iframe中的元素,那肯定是找不到的。反之你在一个iframe中查找另一个iframe元素或default content中的元素,那必然也定位不到。
selenium webdriver中提供了进入一个iframe的方法:
WebDriver org.openqa.selenium.WebDriver.TargetLocator.frame(String nameOrId)
也提供了一个返回default content的方法:
WebDriver org.openqa.selenium.WebDriver.TargetLocator.defaultContent()
这样使我们面对iframe时可以轻松应对。
以下我以百度登录为例:
from selenium import webdriver
import unittest
class login(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.implicitly_wait(30)
self.base_url = "http://www.baidu.com"
self.verificationErrors = []
def test_loginpass(self):
driver = self.driver
driver.get(self.base_url)
driver.find_element_by_link_text("登录").click()#定位点击登陆
driver.implicitly_wait(30)#做一个等待加载frame
driver.switch_to_frame("login_iframe");#进入login的iframe框
driver.find_element_by_id("pass_login_username_0").send_keys("name")
driver.find_element_by_id("pass_login_password_0").send_keys("pwd")
driver.find_element_by_id("pass_login_input_submit_0").click()
def tearDown(self):
#self.driver.quit()
self.assertEqual([], self.verificationErrors)
if __name__ == "__main__":
unittest.main()