1

セットアップ:Selenium 2.45.0、IEserver driver2.45.0(x86)、python 2.7.9、window 7 64ビットのpythonバインディング

問題: このリダイレクト ボタンをクリックすると、 href= https:www.work.test.co.in:1XXX9/TEST/servlet/MainServlet/home" target="_blank"

新しいウィンドウが開き、コントロール(フォーカス)が前のウィンドウに残っているため、新しいウィンドウでは何もクリックできません(前のウィンドウを閉じることで確認されます)。

試し
た 1.名前がないため、試すことができません

driver.switch_to_window("windowName")

2.ハンドルを印刷しようとしました(ハンドル参照を使用できるように)が、ウィンドウハンドルが1つしか表示されません。次のコードを使用

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

3.質問 1 : なぜウィンドウ ハンドル ハンドルが 1 つしか表示されないのですか?タスク マネージャーで 2 つの IE インスタンスを確認できます。

4.インデックスを使用してみました-0、1など

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

5.試してみましたが、これについてはよくわかりません

driver.SwitchTo().Window(driver.WindowHandles.Last())

6.試してみましたが、アラートウィンドウではないことは確かです。

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 の 2 つのインスタンスを表示している場合でも、2 番目のウィンドウ ハンドルを取得しない理由です。

4

1 に答える 1

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();
于 2015-03-11T22:07:23.490 に答える