2015-02-27 16 views
6

Ben PhantomJS için yeniyim ve phantomjs sürücüsünü kullanarak selenyum testlerimi (python) çalıştırmaya çalışıyorum ama Web öğeleri olmayacak.Phantom JS sürücüsü öğeleri bulamıyor bazen

Ghostdriver günlükleri:

[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 

ilginç kısmı başarıyla phantomjs yükledikten sonra, giriş testi koştu ve hiçbir sorunla geçti olmasıdır. Sonra yukarıda belirtilen aynı sebepten dolayı başarısız olan başka bir test yaptım. Geçen Giriş testini tekrar denedim - ama phantomjs sürücüsü artık elementleri bulamayacaktı.

Bunun hakkında bir fikriniz nedir? Bu arada

, bu testler JavascriptExecutor kullanarak javascript ile erişilebilir olduğunu, ben bu elemanlar phantomJS sürücüsü tarafından find_element yöntemler kullanılarak test durumları bulunan edilmiyor fark etmiş krom ve FF

+0

'time.sleep' ı deneyin (5) 'WebDriverWait' yerine – Olexandr

cevap

0

ince çalıştırın. Öğeye erişmek ve bir öğedeki eylem için java komut dosyasını kullanın. Sorunu çözeceğinizi umuyorum.

+0

Cevabınız için teşekkürler. Ama bu çözüm benim için çalışmayacak. Bunu yapmak için çok fazla değişiklik yapmam gerekecek :( – rootimbo

0

Selenyum testinizin yüklenmeden önce eleman bulmaya çalışması mümkündür. İlk başarısız denemeden sonra, tekrar tekrar denemelisiniz ve öğeyi veya zaman aşımını aşana kadar devam edin.

Kıvılcıma bakın https://splinter.readthedocs.org/en/latest/index.html Selenyum ile çalışır ve elementleri beklemek mantığı uygular.

+0

Öğeyi bulmak için 10 saniye bekliyorum, bundan sonra zaman aşımı istisnası atılıyor. Dosya "/Library/Python/2.7/site-packages/selenium/ webdriver/destek/wait.py ", satır 71, saatine kadar zam. TimeoutException (ileti) TimeoutException: Message: – rootimbo

3

Bu yüzden Selenium WebDriver Wait'i kullanan herhangi bir öğe gibi görünüyor aslında bir yoklama şeması kullanıyor. Bir Selenium açık beklemesinin, kodda ilerlemeden önce belirli bir koşulun gerçekleşmesini beklemek üzere tanımladığınız kod olduğunu unutmayın. WebDriverWait varsayılan olarak ExpectedCondition öğesini başarıyla döndürene kadar her 500 milisaniyede bir kez çağırır. (reference.) Her 500 mSec'in anlamı nedir, Selenium bekleme koşulunu test eder. Doğruysa devam edin. Henüz doğru değilse, başka bir anket sıklığı döngüsünü bekleyin, ardından tekrar deneyin.

Ve testlerinden

, inancım bir anket testi ve hazır değil henüz öylesine bir kesinlikle bir proje üzerinde çalışıyorum

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

benim ghostdriver.log bir hata üretir başarısız diyoruz ki Bu karmaşık tek bir sayfa AJAX sitesi kazıyor. Sitenin ortak div öğelerini yeniden kullanması nedeniyle, çok fazla arama yapmam gerekiyor (açık, yapıştırma değeri, tıklama, bekle, sayfadaki farklı bir tabloya git, ilgi verilerini kopyala, tekrarla ...) ihtiyacım olan veriler.

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

Bu yoklama frekansı Ben davranışı hakkında merak ediyordum sınıfa selenium.webdriver.support.wait.WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)

Reference here.

ayarlanır çıkıyor: Site tür yavaş olduğu için, ben üzerinden bekleme elemanlarını geçerlidir. Anket_kayıtım 0,5 saniyeye ayarlandığında, 98 WebElementLocator hatası aldım. Bunu 7,5 saniyeye değiştirdiğimde, driver.wait = WebDriverWait(driver, 60, 7.5), sadece 36 hata aldım. Daha küçük anket zamanları daha fazla hata üretir.

Gerçekten garip bulduğum şey, normal bir yoklama davranışının (Selenium) herhangi bir yerde günlük hatası (PhantomJS) oluşturmasını beklemem. Bir yoklama için, henüz hazır olmayan bir eleman için farklı bir günlük girişi olsaydı ...

İlgili konular