我正在尝试使用Python Selenium Webdriver自动化一些测试用例。我点击一个按钮,打开一个新窗口/ iframe / popup。这需要在文本框中添加一些数据,并从下拉框中选择一些。我有两个问题,
当我选择新窗口/ iframe / popup(附图像)时,这是我在firepath中看到的xpath和内容,
html/body/div[11]
我这里有代码,
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(?????)
我不确定我应该用?????
取代什么“名字”感谢任何帮助。
答案 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());