2012-06-04 8 views
11

Python/JS'de oldukça yeni ve ayrıca Selenium/WebDriver ile otomatik test yapıyorum, ama biraz ilerleme kaydettim!Selenium/WebDriver betiği uyarı ile kesintiye uğrar - istisna "Mesaj: u'Modal dialog mevcut" "

Şimdi bir noktada sıkışıp kaldım ve gerçekten sinir bozucu.

Test ettiğim web sitesi ürünleri satıyor. Benim komut dosyası rastgele gezinmek ve ödeme sayfasına ulaşmak taklit verinin doldurun kullanarak veri aktarabilmek başardı:

Genellikle
browser.execute_script("document.Form.submit(); return true;") 
browser.execute_script("processPayment(); return true;") 

, bir Öde şimdi düğmesi yoktur ve aynı istisna o eleman sonuçlarını tıklayıp WebDriver (WebElement yok) aracılığıyla Tamam/İptal üzerine tıklamanın bir yolu yoktu, ancak bu JS kodunu yürütmenin onu geçebileceğini anladım. Yeni yüklediğim sayfam (verileri gönderdikten ve gönderdikten sonra onayladıktan sonra) bir onay ve tüm doğru veri yükleriyle birlikte, ancak Python betiği kesintiye uğradı ve teste devam edemiyorum.

Bunun için bir çözüm var mı? Ne ben yapmak istiyorum kullanarak vb onlara

çalıştı depolanması, değerlerini baskı, konumlandırma elemanlarını devam Girdiğiniz kalıcı iletişim görmezden sonra yük ve yanındaki onay sayfasının beklemektir:

wait = ui.WebDriverWait(browser,10) 
wait.until(lambda browser: browser.title.lower().startswith('Your Receipt')) 
print(browser.title) 

ama betik kesintiye uğradı. Üzgünüm, eğer bu cevaplanmışsa, ama bulamadım ve ayrıca yeni bir çocuk benim!

Şimdiden teşekkürler!

EDIT:

sonuçları nelerin Benim durumumda Sadece Uyarısı ithal etmek gerekir başlayanlar için benim kod biraz

browser.execute_script("document.roomBookingForm.submit(); return true;") 
alert = browser.switch_to_alert() 
alert.dismiss() 
browser.execute_script("processPayment(); return true;") 

Not değiştirilir. Eğer Uyarısı ithal etmek gerekir (benim gibi) yeni başlayanlar için

from selenium.webdriver.common.alert import Alert 

cevap

8

Not.

from selenium.webdriver.common.alert import Alert 

... ... ... (code placeholder) 

browser.execute_script("document.roomBookingForm.submit(); return true;") 
alert = browser.switch_to_alert() 
alert.dismiss() 
browser.execute_script("processPayment(); return true;") 

sadece

+1

alert.dismiss() yöntemi benim için çalıştı uyarı işleyicisi ekledi. Teşekkürler Tihomir S. –

+2

Elbette alert.dismiss() "iptal" düğmesine basar; "Tamam" a basmak için alert.accept() öğesini kullanın. –

+1

ve cevaptaki tarayıcı "webdriver" örneğidir. – Sinux