将控件移动到selenium webdriver中新打开的IE窗口(使用python):没有窗口名称,没有窗口句柄,没有警报

时间:2015-03-11 11:41:44

标签: python selenium automation webdriver window-handles

设置:selenium 2.45.0,IEserver driver2.45.0(x86),python 2.7.9,窗口7 64位的python绑定

问题:当我点击此重定向按钮时,href = https:www.work.test.co.in:1XXX9 / TEST / servlet / MainServlet / home"目标=" _blank"

打开一个新窗口,无法在新窗口上单击任何内容,因为控件(焦点)仍保留在上一个窗口中(通过关闭上一个窗口确认)。

试过
1.没有名字,所以不能尝试

driver.switch_to_window("windowName")

2.打算打印手柄(这样我可以使用手柄参考)但我只能看到一个窗口手柄。使用以下代码

for handle in driver.window_handles:
  print "Handle arr = ",handle
  driver.switch_to_window(handle)

3.Question1:为什么我只获得一个窗口句柄句柄,我可以在任务管理器中看到两个IE实例。

4.i尝试使用索引 - 0,1等。

driver.switch_to_window(driver.window_handles[-1])  

5.虽然尝试了

但不确定这件事
driver.SwitchTo().Window(driver.WindowHandles.Last())

尽管我确信它不是警报窗口。

alert = driver.switch_to_alert() 

脚本:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from time import sleep  



driver = webdriver.Ie()
driver.get("https://my intranet site .aspx")
driver.implicitly_wait(2)
elem = driver.find_element_by_xpath("my xpath ")
elem.click()
driver.implicitly_wait(2)
elem = driver.find_element_by_xpath("//*[@id='tab1_2']/div[16]")
elem.click()

handle = driver.current_window_handle
print "Handle main  = ",handle

driver.implicitly_wait(5)
elem = driver.find_element_by_xpath("page link button")
elem.click()
sleep(5)
my tried scenarioes here

建议将受到高度赞赏 更新 - 当新窗口通过链接URL直接打开时,能够对其执行操作,如点击等 因此,唯一的问题是当我通过脚本继续第一个窗口打开它时。

更新:主要关注的是即使任务管理器显示两个IE实例,为什么不获取第二个窗口句柄。

1 个答案:

答案 0 :(得分:0)

我不懂Python,但在Java中我会这样做:

 // get handles to all opened windows before the click
 Set<String>  handlesBeforeTheClick = driver.getWindowHandles();
 // and now click on the link that opens a new window
 findElement( linkThatOpensNewWindow ).click();
 // then wait until a new window will be opened
 wait.until( ....condition ==> handlesBeforeClick.size() < driver.getWindowHandles().size(); .... )
 // then get a handle to a new window
 Set<String> handlesAfterClick = driver.getWindowHandles();
 handlesAfterClick.removeAll( handlesBeforeClick );
 String handleToNewWindow = handlesAfterClick.iterator().next();