Python / Selen : Wechseln Sie zu einem Alarm und überprüfen Sie den text innerhalb
Mein Problem: in der Lage zu erkennen, eine alert-box geöffnet wurde, überprüfen Sie den text der Warnmeldung, bestätigen Sie den text und schließen Sie dann die Warnung. Dann gehen Sie zurück und korrigieren Sie die ungültige E-Mail.
Mein test ist man für die Registrierung eines Benutzers. Ich brauche, um zu überprüfen, wenn jemand Eingabe-falsche Daten oder andere Daten. In diesem Fall bin ich der Eingabe einer E-Mail und überprüfen Sie die E-Mail zuerst eingegeben. Sollten Sie eine Diskrepanz, erscheint ein popup mit der Benachrichtigung der Benutzer zu überprüfen, die E-Mail-Adressen, die Sie eingegeben haben, und dass Sie übereinstimmen. Bisher alle, die ich bekommen kann ist ein Fehler.
Fehler:
E UnexpectedAlertPresentException: Meldung: u'Modal dialog
vorhanden' ; Stacktrace: Methode nsCommandProcessor.der Prototyp.ausführen
warf einen Fehler in file:///var/folders/1j/x3cxkrqn3sscdyq0t36169hr0000gn/T/tmpTCqMgm/extensions/[email protected]/components/command_processor.js
Dachte ich, der code wäre damit umzugehen, aber pustekuchen. Wenn jemand darauf hinweisen könnte, meinen, Sie offensichtlich Fehler wäre ich dankbar.
Meine gesamte test-code:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
import unittest, time, re
class ChallengeTests(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.implicitly_wait(5)
self.base_url = "https://www.testpage.com"
self.verificationErrors = []
self.accept_next_alert = True
# SIGN UP NEW USER
def test_00_sign_up(self):
driver = self.driver
driver.get(self.base_url + "/")
driver.find_element_by_id("remail").send_keys("[email protected]")
driver.find_element_by_id("remail_confirm").send_keys("[email protected]")
driver.find_element_by_id("next").click()
alert = self.driver.switch_to_alert()
alert = self.assertTrue(self.is_text_present("The email addresses you entered"))
driver.find_element_by_id("remail_confirm").send_keys("[email protected]")
driver.find_element_by_id("registration_button").click()
# NON TESTS
def is_element_present(self, how, what):
try:
self.driver.find_element(by=how, value=what) # to find page elements
except NoSuchElementException, e: return False
return True
def is_text_present(self, text):
try:
body = self.driver.find_element_by_tag_name("body") # find body tag element
except NoSuchElementException, e: return False
return text in body.text # check if the text is in body's text
def is_alert_present(self):
try:
self.driver.switch_to_alert()
except NoAlertPresentException, e:
return False
def close_alert_and_get_its_text(self):
try:
alert = self.driver.switch_to_alert()
alert_text = alert.text
if self.accept_next_alert:
alert.accept()
else:
alert.dismiss()
return alert_text
finally: self.accept_next_alert = True
return True
def tearDown(self):
self.driver.quit()
self.assertEqual([], self.verificationErrors)
InformationsquelleAutor Dave | 2013-08-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen zu warten, damit die Warnung angezeigt wird, bevor Sie direkt den Wechsel zu es.
Wenn das nicht funktioniert, habe ich das Gefühl, dass das popup ist eigentlich eine weblement und nicht eine JS-alert. wenn das der Fall ist, versuchen, eine Auswahl über die browser-Entwickler-tools und direkt mit ihm interagieren.
Wenn die Warnmeldung erzeugt wird, versuchen Sie, inspizieren Sie das element mit Firebug oder Chrome Developer tools. Das sollte ein guter Weg um zu starten. Sobald Sie finden, das element, würden Sie nicht brauchen, die Interaktion aufgeführten Methoden, unter der 6.3-Modul.
Ich habe versucht mit Firebug und Charles Proxy. Ich (Firebug) nicht sehen können. Ich bin sicher, das ist wegen meinen Mangel an wissen, wo man suchen obwohl, für Charles.
Vielen Dank Dave! Sie rettete meinen Nachmittag! 🙂 PS: haben Sie versucht, zu verwenden get_alert()? Bei mir hat es geklappt!
InformationsquelleAutor Amey
Auf eine neuere version von Python(3.4)
Wenn ich versuche, fügen Sie den code auf die neuere version von Python, gab es mir einen Fehler. Dann habe ich versucht diese Methode, es funktioniert.
InformationsquelleAutor user3174886