wake-up-neo.net

Assert/VerifyElementPresent mit Python und WebDriver?

Ich kann nur durch den Wechsel von Selenium zu WebDriver und deren Dokumentation verwirrt werden. In einem Abschnitt über Testdesign in der Dokumentation wird von der Verwendung von Assert vs Verify wie AssertElementPresent gesprochen. Wenn Sie das WebDriver-Tutorial durchgehen und mit dem Einrichten von Tests beginnen, scheint dies jedoch nicht bei Python verfügbar zu sein. Überspringe ich etwas in der Dokumentation, ist dies nicht auf WebDriver anwendbar, nicht auf Python, sollte ich Python-Funktionen verwenden und nicht den Befehl Selenium bestätigen/bestätigen, usw.?

19
Dan Roberts

webdriver ist eine Bibliothek zum Fahren von Browsern. Was Sie verwenden möchten, sind die * find_element * -Methoden, um Elemente zu suchen und Bedingungen gegen sie geltend zu machen.

dieser Code macht zum Beispiel eine Aussage über den Inhalt eines Elements:

from Selenium import webdriver

browser = webdriver.Firefox()
browser.get('http://www.example.com')
element = browser.find_element_by_tag_name('h1')
assert element.text == 'Example Domains'
browser.quit()
  • beachten Sie, dass dieses Beispiel ein reiner Python mit einer bloßen Bestätigung ist. Es ist besser, ein Testframework wie Pythons unittest zu verwenden, das leistungsfähigere Aussagen hat.
20
Corey Goldberg

In Selenium RC gibt es Überprüfungs-/Bestätigungsmethoden. In WebDriver ist dies nicht der Fall. Es ist auch wichtig zu beachten, welche Verifizierungen und Zusicherungen dies tun und welche Rolle sie in Ihren Tests spielen. In Selenium RC wird mithilfe von Verify überprüft, ob es sich um Text, Elemente oder was Sie handelt. Assert hingegen bewirkt, dass ein Test fehlschlägt und stoppt. Die Vorteile und Vorteile werden in dem Link beschrieben, auf den Sie verwiesen haben. 

WebDriver verfügt nicht über verifizierte/bestätigte Methoden pro Wort. Assertionen werden im Test selbst durchgeführt. Wenn Sie einen Blick auf Coreys Antwort werfen, führt er einen "Assert" für den Elementtext aus. Wenn der Text des Elements nicht "Beispieldomänen" ist, wird ein AssertionError ausgelöst, wodurch der Test effektiv fehlschlägt. Aber was ist mit einer Überprüfung? Wie gesagt, WebDriver hat keinen. Aber Sie könnten trotzdem etwas Vergleichbares durchführen.

if element.text != u'Example Domains':
    print "Verify Failed: element text is not %r" % element.text

In diesem Fall wird Ihr Test also nicht fehlschlagen. Es wird jedoch immer noch eine Überprüfung durchgeführt und auf stdout gedruckt.

Am Ende geht es also darum, was Sie versagen wollen. Es ist eher ein Testdesign. Hoffe das hilft.

6
kenneth koontz

Sie sollten die folgende Funktion verwenden, um das zu überprüfen:

def is_element_present(self, how, what):
    try: self.driver.find_element(by=how, value=what)
    except NoSuchElementException as e: return False
    return True

Welcher Standardwert wird von Selenium IDE beim Exportieren in Python-Code erstellt.

Dann können Sie das Element wie folgt bestätigen:

self.assertTrue(self.is_element_present(By.ID, "footer"))
self.assertTrue(self.is_element_present(By.CSS_SELECTOR, "header.global-header"))

Beachten Sie, dass der folgende Import erforderlich ist, um By zu verwenden:

from Selenium.webdriver.common.by import By
5
kenorb

Ein anderer Weg ist wie folgt:

from Selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://www.testing.com')
element = driver.find_element_by_xpath('xpath of the element').text
assert element == 'Sample Text'
driver.quit()
0
Vipin