2012-01-13 24 views
17

Tôi chỉ có thể bị nhầm lẫn bởi sự thay đổi từ Selenium sang WebDriver và tài liệu tương ứng của chúng. Trong một phần về thiết kế thử nghiệm trong tài liệu có nói chuyện về việc sử dụng Assert vs Verify chẳng hạn như AssertElementPresent. Tuy nhiên trong việc đi qua các hướng dẫn WebDriver và bắt đầu để thiết lập các bài kiểm tra này dường như không có sẵn từ Python. Tôi có nhìn thấy một cái gì đó trong tài liệu hướng dẫn, điều này không áp dụng cho WebDriver, không áp dụng cho việc sử dụng python, tôi có nên sử dụng khả năng của python và không xác nhận/xác minh lệnh từ selen, v.v ... không?Assert/VerifyElementPresent với Python và WebDriver?

Trả lời

16

trình quản trị trang web là thư viện để điều khiển trình duyệt. những gì bạn muốn sử dụng là các phương thức * find_element * để định vị các phần tử và sau đó khẳng định các điều kiện chống lại chúng.

ví dụ, mã này không một sự khẳng định về nội dung của một phần tử:

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() 
  • lưu ý ví dụ này là trăn tinh khiết với một khẳng định trần. Tốt hơn là nên sử dụng một khung kiểm thử như con trăn của unittest, có các xác nhận mạnh mẽ hơn.
+0

Nên là một câu hỏi riêng biệt nhưng có liên quan ở đây: làm cách nào tôi khẳng định rằng n phần tử không có trên trang? – Priednis

+0

Tìm thấy câu trả lời của tôi ở đây: http://sqa.stackexchange.com/questions/3481/quicker-way-to-assert-that-an-element-does-not-exist?rq=1 – Priednis

+0

Tôi thích làm một số thử/ngoại trừ khối NoSuchElementException cho cuộc gọi find_element_by_tag_name, vì nếu không tìm thấy phần tử, thì kiểm tra sẽ đánh dấu một ngoại lệ ERROR thay vì FAILURE ... Hoặc có cách nào để khẳng định phần tử có mặt mà không có sự bất tiện này không? –

6

Trong Selenium RC, xác minh/xác nhận phương pháp tồn tại. Trong WebDriver, họ không. Ngoài ra, điều quan trọng cần lưu ý là những gì xác minh và khẳng định và vai trò của họ trong các bài kiểm tra của bạn. Trong Selenium RC, xác minh được sử dụng để thực hiện một kiểm tra trong thử nghiệm của bạn, cho dù nó có thể là trên văn bản, các yếu tố, hoặc những gì có bạn. Mặt khác, khẳng định sẽ gây ra một thử nghiệm thất bại và dừng lại. Những lợi ích và lợi thế được thảo luận trong liên kết mà bạn đã tham chiếu.

WebDriver không có phương pháp xác minh/khẳng định mỗi lần nói. Các xác nhận được thực hiện trong bản thân bài kiểm tra. Nếu bạn nhìn vào câu trả lời của Corey, anh ta thực hiện "khẳng định" trên văn bản của phần tử. Nếu văn bản của phần tử không phải là 'Tên miền mẫu' thì một AssertionError sẽ được nâng lên, thực sự thất bại trong việc kiểm tra của bạn. Nhưng những gì về một xác minh? Như đã đề cập, WebDriver không có. Nhưng bạn vẫn có thể thực hiện một cái gì đó tương đương bằng cách so sánh.

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

Vì vậy, trong trường hợp này, thử nghiệm của bạn sẽ không thành công. Tuy nhiên, xác minh vẫn sẽ diễn ra và sẽ in ra để xuất bản.

Vì vậy, cuối cùng, đó là vấn đề của những gì bạn muốn thất bại. Đó là một thiết kế thử nghiệm. Hi vọng điêu nay co ich.

-1

Xác minh Khẳng định

driver= webdriver.Firefox() 

String x =driver.findElement(By.xpath("//*[@id='userNavLabel']")).getText(); 

System.out.println(x); 

//Assert.assertEquals(actual, expected) 

Assert.assertEquals("Anandan Aranganath", x); 
+1

Câu hỏi python selen. Không phải Java – bron

4

Bạn nên sử dụng các chức năng sau đây để kiểm tra xem:

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

Đó là mặc định được tạo ra bởi Selenium IDE khi xuất khẩu để mã Python.

Sau đó, bạn có thể khẳng định các yếu tố như sau:

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

Lưu ý rằng việc nhập khẩu sau đây là cần thiết để sử dụng By:

from selenium.webdriver.common.by import By 
0

Một cách khác là như sau:

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() 
Các vấn đề liên quan