2013-07-16 23 views
13

Bir web uygulamasında çalışıyorum. Pop pencereler bir uyarı değildir, ancak kullanıcı tarafından girilecek çeşitli alanlara sahip bir form ve "İleri" ye tıklar.Python web gezgini tarayıcı pencereleri bir uyarı değil açılır pencereleri işlemek için

Bu açılır pencereleri selenyum kullanarak nasıl işleyebilirim/otomatikleştirebilirim.

Özeti: - köprü (URL) üzerinde

  1. tıklayın - "TIKLAYINIZ"
  2. Bir kullanıcı kayıt formu pop-up
  3. bir veri kullanıcı
  4. tarafından doldurulacak gibi görünür
  5. İleri/Gönder düğmesine tıklayın.
  6. Başka
  7. Kişisel bilgilerin kullanıcı tarafından doldurulacak olan başka bir sayfa/formu 'Kişisel Bilgi Page'in Kullanıcı' olarak yönlendirilen sonraki
  8. tıklayın
  9. Popup kayboldu "İleri/Gönder".
  10. Artık orijinal/Ana sayfada işleniyor.
+0

Uyarı değilse, açılır pencere olabileceği birkaç farklı yol vardır. Web uygulamasının bir ekran görüntüsünü ve ilgili html bitini ekleyebilir misiniz? –

+0

Bu temel neden olabilir mi? Fxdriver.modals.clearFlag_ ... cf.'ye atlanan bir çağrı https://stackoverflow.com/questions/44568402/how-do-i-manually-mouse-dismiss-a-javascript-alert-and-get-back-the-the-body-o/44592827#44592827 – NevilleDNZ

cevap

3

Eğer onun bir yeni window veya iframe Eğer driver.switch_to_frame(webelement) veya driver.switch_to_window(window_name) kullanmalıdır. Bu, açılır pencerede elements ile etkileşime girebilmenizi sağlar. Bitirdikten sonra, ana web sayfasına dönmek için driver.switch_to_default_content() olmalıdır. Bir pop-up geçiş

25

en az iki ayrı nedenden dolayı güçtür:

  1. elemanları bulmak, böylece sen, pop-up göründüğünde hem driver.switch_to.window(window_handle) kullanmak gerekir ki, birçok kişi biliyor bir, açılır pencerede ve açılır pencerenin kapatılmasından sonra, ana pencerede öğelerin geri alınabileceği şekilde.
  2. Yalnızca yavaş makinelere sahip kişilerin karşılaşması muhtemeldir; bu, Selenium'un bir pencere tutamacını değişken olarak kullanması durumunda, başlangıçta Yok olarak ayarlanır ve bir değerle doldurulmadan önce biraz zaman alır.

İstediğiniz sıralamayı gerçekleştirirken bu sorunları ele alan bazı kodlar. import ifadelerini dışarıda bırakıyorum ve umduğum umduğum değişken isimleri kullanıyorum. Ayrıca, kodumda find_element(s)_by_xpath kullanmayı sevdiğimi unutmayın; Diğer find_element(s)_by yöntemlerini kullanmaktan çekinmeyin:

main_window_handle = None 
while not main_window_handle: 
    main_window_handle = driver.current_window_handle 
driver.find_element_by_xpath(u'//a[text()="click here"]').click() 
signin_window_handle = None 
while not signin_window_handle: 
    for handle in driver.window_handles: 
     if handle != main_window_handle: 
      signin_window_handle = handle 
      break 
driver.switch_to.window(signin_window_handle) 
driver.find_element_by_xpath(u'//input[@id="id_1"]').send_keys(user_text_1) 
driver.find_element_by_xpath(u'//input[@value="OK"]').click() 
driver.find_element_by_xpath(u'//input[@id="id_2"]').send_keys(user_text_2) 
driver.find_element_by_xpath(u'//input[@value="OK"]').click() 
driver.switch_to.window(main_window_handle) #or driver.switch_to_default_content() 

birisi (belki ben) örneğe daha eklemek, ya da daha açık hale getirmek için, diğer bilgi sağlamak gerekiyorsa bana bildirin.

+1

Cevabınız hayatımı bir süre önce kurtardı! Bir çekicilik gibi çalıştı, ancak Chrome 54 ve Chromedriver 2.25'ten beri, uzantı açılır penceresinin pencere tanıtıcısını almanın bir yolu yok. Sürücüde.window_handles' sadece benim için ana pencere var. Başka bir fikrin var mı? Teşekkürler! – monami

+1

@MarkRowlands'taki gibi https://stackoverflow.com/a/17676233/248616 numaralı yanıtı kullanarak 'driver.switch_to_default_content()' işlevini kullanarak orijinal pencereye geri dönün –

İlgili konular