2013-03-01 20 views
11

Gần đây tôi đã gặp phải sự cố khi làm việc với selen khi gọi số clear() trên hộp văn bản tùy chỉnh gây ra sự cố khi nhập văn bản sau trong thử nghiệm. Hộp văn bản không kiểm tra (JavaScript) browserEvents, đặc biệt là keyDown sự kiện. Tôi đã cố gắng tìm ra những gì clear() không để xem nếu điều đó có thể ảnh hưởng đến mọi thứ, nhưng tôi dường như không thể tìm thấy bất kỳ chi tiết cụ thể.WebElement.clear() Làm gì để TextBoxes?

Nguồn cho các liên kết Java Selenium shows that clear() does not use keyboard or mouse simulation để xóa văn bản khỏi hộp văn bản. Vì vậy, nó làm gì, chính xác?

Trả lời

25

Phương pháp clear() thực hiện một "Automation Atom", mà là một hàm JavaScript nhằm cung cấp các đơn vị cơ bản nhỏ nhất của chức năng tự động hóa cho trình duyệt. Trong trường hợp của clear(), hàm đó đặt thuộc tính value của phần tử thành một chuỗi rỗng (''), sau đó kích hoạt sự kiện onchange trên phần tử. Hàm nguyên tử bạn quan tâm là bot.action.clear()

+0

Xin chào, tôi đã đào bài đăng này, vì tôi muốn xem mã nguồn của 'WebElement.clear()', nhưng các liên kết bạn cung cấp không còn hoạt động nữa. Tôi sẽ vô cùng biết ơn nếu bạn có thể cho tôi biết nơi để nhìn từ khi tôi bị kẹt ... – DCzo

+0

Đi tới wiki cho [Nguyên tử Tự động] (https://github.com/SeleniumHQ/selenium/wiki/Automation-Atoms). Có một liên kết ở phía dưới sẽ đưa bạn đến tệp xây dựng. – MikeJRamsey56

4

Đây là những gì chính xác clear() sẽ thực hiện. Hàm sẽ xóa giá trị hộp văn bản và bật hộp văn bản. Trước khi nhập văn bản vào trường văn bản, chúng ta cần phải xóa trường văn bản và kích hoạt nó. Nếu chúng tôi không sử dụng clear(), chúng tôi không thể nhập bất kỳ giá trị nào vào trường văn bản bằng cách sử dụng selen.

driver.find_element_by_xpath(xpath).clear() 
driver.find_element_by_xpath(xpath).send_keys("data") 
+0

Câu trả lời này không chính xác. Bạn không cần phải 'clear()' hộp văn bản để kích hoạt nó. Bạn sẽ sử dụng 'clear()' để xóa bất kỳ văn bản hiện có nào trong hộp văn bản trước khi nhập một giá trị mới. Câu trả lời của Jim là chính xác và chi tiết về mặt kỹ thuật hơn. – JeffC

Các vấn đề liên quan