2015-02-27 15 views
6

Tôi mới dùng PhantomJS và tôi đang cố gắng chạy thử nghiệm selen (python) bằng trình điều khiển ảo nhưng nó sẽ không phải là phần tử web.Trình điều khiển Phantom JS không thể xác định được các thành phần đôi khi

bản ghi Ghostdriver:

[INFO - 2015-02-27T15:24:40.236Z] GhostDriver - Main - running on port 52653 
[INFO - 2015-02-27T15:24:41.075Z] Session [bfd397f0-be94-11e4-ad03-b711254501c8] - page.settings - {"XSSAuditingEnabled":false,"javascriptCanCloseWindows":true,"javascriptCanOpenWindows":true,"javascriptEnabled":true,"loadImages":true,"localToRemoteUrlAccessEnabled":false,"userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.0.0 Safari/538.1","webSecurityEnabled":true} 
[INFO - 2015-02-27T15:24:41.075Z] Session [bfd397f0-be94-11e4-ad03-b711254501c8] - page.customHeaders: - {} 
[INFO - 2015-02-27T15:24:41.075Z] Session [bfd397f0-be94-11e4-ad03-b711254501c8] - Session.negotiatedCapabilities - {"browserName":"phantomjs","version":"2.0.0","driverName":"ghostdriver","driverVersion":"1.2.0","platform":"mac-10.9 (Mavericks)-64bit","javascriptEnabled":true,"takesScreenshot":true,"handlesAlerts":false,"databaseEnabled":false,"locationContextEnabled":false,"applicationCacheEnabled":false,"browserConnectionEnabled":false,"cssSelectorsEnabled":true,"webStorageEnabled":false,"rotatable":false,"acceptSslCerts":false,"nativeEvents":true,"proxy":{"proxyType":"direct"}} 
[INFO - 2015-02-27T15:24:41.075Z] SessionManagerReqHand - _postNewSessionCommand - New Session Created: bfd397f0-be94-11e4-ad03-b711254501c8 
[ERROR - 2015-02-27T15:24:47.242Z] WebElementLocator - _handleLocateCommand - Element(s) NOT Found: GAVE UP. Search Stop Time: 1425050687190 

    :262 in error 

Phần hấp dẫn là, sau khi tôi cài đặt thành công phantomjs, tôi chạy kiểm tra đăng nhập của tôi và nó trôi qua mà không có vấn đề. Sau đó, tôi chạy một thử nghiệm khác không thành công vì lý do tương tự được đề cập ở trên. Tôi đã thử chạy lại kiểm tra Đăng nhập đã trôi qua - nhưng trình điều khiển phantomjs sẽ không tìm thấy các phần tử nữa.

Bất kỳ ý tưởng nào gây ra điều này?

Bằng cách này, những thử nghiệm chạy tốt với chrome và FF

+0

thử 'time.sleep (5)' thay vì 'WebDriverWait' – Olexandr

Trả lời

0

tôi đã nhận thấy những yếu tố không được nằm trong trường hợp thử nghiệm sử dụng phương pháp find_element bằng lái xe phantomJS, mà có thể được truy cập bằng cách sử dụng javascript JavascriptExecutor. Sử dụng kịch bản java để truy cập vào phần tử và cho hành động trên một phần tử. Tôi hy vọng rằng sẽ giải quyết vấn đề của bạn.

+0

Cảm ơn câu trả lời của bạn. Nhưng giải pháp này sẽ không làm việc cho tôi. Tôi sẽ phải thực hiện rất nhiều thay đổi để làm cho nó hoạt động: ( – rootimbo

0

Có thể kiểm tra selen của bạn sẽ cố gắng tìm phần tử trước khi nó được tải. Sau lần thử không thành công đầu tiên, bạn nên thử lại và tiếp tục cho đến khi bạn tìm thấy phần tử hoặc thời gian chờ vượt quá.

Nhìn vào splinter https://splinter.readthedocs.org/en/latest/index.html Nó hoạt động với selen và thực hiện logic chờ đợi các yếu tố.

+0

Tôi đang chờ đợi 10 giây để xác định vị trí phần tử, sau đó một ngoại lệ hết thời gian được ném. File "/Library/Python/2.7/site-packages/selenium/ webdriver/support/wait.py ", dòng 71, cho đến khi tăng TimeoutException (thư) TimeoutException: Thư: – rootimbo

3

Vì vậy, có vẻ như bất kỳ phần tử nào sử dụng Selenium WebDriver Wait thực sự đang sử dụng lược đồ bỏ phiếu. Hãy nhớ rằng một sự chờ đợi rõ ràng của Selen là mã bạn xác định để chờ một điều kiện nhất định xảy ra trước khi tiếp tục trong mã. WebDriverWait theo mặc định gọi ExpectedCondition cứ sau 500 mili giây cho đến khi nó trả về thành công. (reference.) Điều đó có nghĩa là mỗi 500 mSecs, Selenium kiểm tra điều kiện chờ đợi. Nếu đúng, hãy tiếp tục. Nếu chưa đúng, hãy chờ một chu kỳ tần suất thăm dò ý kiến ​​khác, sau đó thử lại.

Và từ thử nghiệm của tôi, niềm tin của tôi là một thử nghiệm thăm dò và không-ready-nhưng rất gọi nó là một thất bại chắc chắn tạo ra một sai sót trong ghostdriver.log tôi

[ERROR - 2016-08-14T08:50:12.896Z] WebElementLocator - _handleLocateCommand - Element(s) NOT Found: GAVE UP. Search Stop Time: 1471164612878 

Tôi đang làm việc trên một dự án có một trang đơn AJAX phức tạp. Bởi vì trang web tái sử dụng các phần tử div thông thường, tôi phải thực hiện rất nhiều cuộc gọi (rõ ràng, dán giá trị, nhấp, đợi, chuyển đến một bảng khác trên trang, sao chép dữ liệu quan tâm, lặp lại ...) để có được dữ liệu tôi cần. Và bởi vì trang web này là loại chậm, tôi áp dụng các yếu tố chờ đợi qua:

driver.wait.until(EC.presence_of_element_located((By.XPATH, "//*[@id='special_content_id']//td[contains(.,'" + info.unitId + "')]"))) 

Nó chỉ ra rằng tần số điểm bỏ phiếu được thiết lập trong lớp selenium.webdriver.support.wait.WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)

Reference here.

Tôi đã tò mò về hành vi. Khi poll_frequency của tôi được đặt thành 0,5 giây, tôi nhận được 98 lỗi WebElementLocator. Khi tôi chuyển sang 7,5 giây, driver.wait = WebDriverWait(driver, 60, 7.5), tôi chỉ nhận được 36 lỗi. Thời gian thăm dò nhỏ hơn tạo ra nhiều lỗi hơn.

Những gì tôi thực sự thấy kỳ lạ là tôi sẽ không mong đợi một hành vi bỏ phiếu thông thường (Selenium) để đặt lỗi nhật ký ở bất cứ đâu (PhantomJS). Tôi ước có một mục nhập nhật ký khác cho một cuộc thăm dò ý kiến, yếu tố chưa sẵn sàng ...

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