Python-Selenium-如何找出它是窗口,iframe还是弹出窗口

时间:2014-02-20 20:28:24

标签: python selenium-webdriver

我正在尝试使用Python Selenium Webdriver自动化一些测试用例。我点击一个按钮,打开一个新窗口/ iframe / popup。这需要在文本框中添加一些数据,并从下拉框中选择一些。我有两个问题,

  1. 如何从Mozilla的火道中找到它的窗口/ iframe / popup?
  2. 如何处理?
  3. 当我选择新窗口/ iframe / popup(附图像)时,这是我在firepath中看到的xpath和内容, html/body/div[11] enter image description here

    我这里有代码,     zenoss_url = "http://xxxxx/" xpath_uname = "html/body/form/div/div/input[1]" xpath_pwd = "html/body/form/div/div/input[2]" xpath_submitButton = "html/body/form/div/div/input[3]" xpath_eventsTab = "html/body/div[7]/div/div/div/div[2]/ul/li[2]/div/div/a" driver = webdriver.Firefox() driver.get(zenoss_url) handle = driver.find_element_by_xpath(xpath_uname) handle.send_keys(zenoss_uname) handle = driver.find_element_by_xpath(xpath_pwd) handle.send_keys(zenoss_pwd) driver.find_element_by_xpath(xpath_submitButton).submit() driver.implicitly_wait(10) driver.find_element_by_xpath("html/body/div[7]/div/div/div/div[2]/ul/li[2]/div/div/a").click() driver.find_element_by_xpath("html/body/div[3]/div/div/div/div[1]/div/div/div[1]/div/div/div[7]/em/button").click() driver.implicitly_wait(5) window = driver.switch_to_window(?????)

    我不确定我应该用?????

    取代什么“名字”

    感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

你的html / body / div [11]的路径只是框架范围内的xpath。导航到帧和子帧时,您可以采取一些方法;从寻找框架的索引到寻找框架的名称。如果使用firepath检查框架内的元素,它将只为元素的xpath提供该框架的范围。框架像箱子里面的盒子一样工作;为了进入第二个盒子,你必须打开第一个盒子并向内看。

//In C# 
driver.switchTo().Frame("FirstFrameFound"); 
//To close the box again and get back to the overall main box. 
driver.switchTo().defaultContent(); 

如果你的第二帧是第一帧的孩子,你必须潜入第一帧,然后切换到第二帧与内部元素进行交互。

//In C# 
//Switch to the first frame 
driver.switchTo().Frame("FirstFrameFound"); 
//Switch to the second frame 
driver.SwitchTo().Frame("SecondFrame"); 
//Now look for your element that you wish to interact with. 
driver.FindElement(By.XPath("//html/body/div[11]")); 
//To close the box again and get back to the overall main box. 
driver.switchTo().defaultContent(); 

请在此处查看此帖子以获取更多信息。

How to navigate a subframe inside a frameset using Selenium WebDriver?

如果您要切换到窗口,也有多种方法。我首选的方法是这种方法:

//When dealing with new window and the parent. 
//Switch to the last window that opened
driver.SwitchTo().Window(driver.WindowHandles.Last()); 
//Perform your actions
driver.Close(); 
//Switch back to the first window 
driver.SwitchTo().Window(driver.WindowHandles.First());