2016-04-13 58 views
0

Ben bir web sayfasında çeşitli alanlarına veri girin ve ardından bir Gönder düğmesini tıklayarak web sitesine göndermek için selenyum/firefox/C# kullanıyorum. ImplicitlyWait kullanmayı denedim, böylece program sonuç sayfasının en fazla 45 saniye boyunca yüklenmesini bekledikten sonra sonuçları o sayfadan alsın. Ben şu anda ben Gönder düğmesini tıklamadan önce örtük beklemek atıyorum buC# Selenyum Örtülü bekleyin

driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(45)); 
driver.FindElement(By.Id("dnn_ctr1734_Professional_btnSubmit")).Click(); 

olarak kodlanmış var, ama nihayet yüklediğinde onun sonuçlarını kapma değil sayfanın yüklenmesini sadece 15 saniye sürer bile. ImplicitWait doğru sırada mı?

+0

Nope, 45 sn uzun bir zamandır. Bu olduğunda başka bir şey oluyor demektir. Düğmenin görünür olduğundan emin olun. Kod ile ekran yakalama yapın. Ayrıca tıklamadan önce pencereyi en üst düzeye çıkarın. Bazen sorun, pencerenin varsayılan boyutunun çok küçük olması ve öğenin görünmemesidir. Hangi tarayıcıyı kullanıyorsunuz? – derloopkat

cevap

0

aşağıdaki gibi açık beklemek, kullanım kodunu kullanmalıdır:

new WebDriverWait(driver, TimeSpan.FromSeconds(45)).Until(ExpectedConditions.ElementExists((By.Id("dnn_ctr1734_Professional_btnSubmit")))); 
driver.FindElement(By.Id("dnn_ctr1734_Professional_btnSubmit")).Click(); 
+0

Firefox kullanıyorum. Bu projede, yeniden gönderme düğmesinin her zaman mevcut olduğunu ve tıklamaya uygun olduğunu tekrar belirtmeliyim. Benim yapmak istediğim, gönder düğmesine tıkladıktan sonra sayfanın sonuçların yüklenmesini beklemesini istiyorum ve ardından sayfa yüklendikten sonra her zaman görünen diğer öğeleri aramam.Driver.FindElement (By.Id ("dnn_ctr1734_Professional_btnSubmit")) 'den sonra örtülü beklemeyi koymalı mıyım? – NSheffield

+0

İşte daha fazla kod, aradığımı görebilmeniz için. Gönder düğmesine bastığımda, sonuç sayfasının yüklenmesi için 5-45 saniye arasında bir süre alabilir (gönderilinceye kadar gönder öğesine tıkladıktan sonra görünen bir eğirme logosu vardır). – NSheffield

+0

driver.FindElement (By.Id ("dnn_ctr1734_Professional_btnSubmit")) 'ı tıklatın(); if (driver.FindElements (By.XPath (".// tr [td [içerdiği (metin(), 'Hak Talebi')]]/td [2]")) Say> 0) {activeSheet. Aralık ["P" + n] .Value = sürücü.FindElement (By.XPath (".// tr [td [içerir (metin(), 'Hak Talebi')]]/td [2]")). ; activeSheet.Range ["Q" + n] .Value = sürücü.FindElement (By.XPath (".// tr [td [içerir (metin(), 'İddia ICN')]]/td [2]")).Metin; activeSheet.Range ["R" + n] .Value = sürücü.FindElement (By.XPath (".// tr [td [içerdiği (metin(), 'Ücretli Tutar')]]/td [2]")).Metin; } – NSheffield

3

doğru yer örtük bir bekleme genellikle sürücü başlatmak hemen sonra olduğu koymak. Temel olarak, bir eylemin tamamlanması için varsayılan bekleme süresi olarak davranır. Yoğun spinner bitene kadar sorunu çözmek için çeşitli yollar vardır

...

  1. kullanın beklenen koşulu ile bir Açık beklemek beklemek.

    var bekleme = Yeni WebDriverWait (Driver.Instance, TimeSpan.FromSeconds (10)); wait.Until (driver =>! Driver.FindElement (By.Id ("busySpinnerID")). Görüntülenen); Belirli bir elemanı izin verene kadar

  2. bekleyin sayfa

    var bekleme = Yeni WebDriverWait (Driver.Instance, TimeSpan.FromSeconds (10)) görülebilir; wait.Until (driver => driver.FindElement (By.Id ("knownElementId")). Görüntülenen); sayfa yüklenene kadar

  3. kullanın JavaScript

    var beklemeye = new WebDriverWait (sürücü, TimeSpan.FromSeconds (30)) beklemek; wait.Until (driver1 => ((IJavaScriptExecutor) sürücü) .ExecuteScript() "document.readyState dönüş" eşittir (yani, "tam").);

0

Dmitry ile aynı fikirdeyim, beklemeyle uğraşmanın en iyi yolu açık bekleme işlevidir. Hayatınızı daha da kolaylaştırmak için bunu bir uzantı yöntemine ekleyebilirsiniz, böylece her zaman öğenin tıklamadan önce var olmasını beklersiniz. Örnek:

Class Actions { 

     public static IWebDriver ClickOn(IWebDriver driver, string button) 
     { 
      var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30)); 
      wait.Until(ExpectedConditions.ElementExists(By.XPath(button))); 
      driver.FindElement(By.XPath(button)).Click(); 
      return driver; 
     } 
} 

Sonra kod elemanı tıklamadan önce varolmaya için hala bekler gibi basit

Actions.ClickOn(d, SignInButton); 

Ve kod

olarak olabilir.