2012-10-19 33 views
7

Tôi đang sử dụng thử nghiệm Selenium 2 (được viết bằng C#) để chọn giá trị từ điều khiển "chọn". Lựa chọn gây ra một post-back cho máy chủ, cập nhật trạng thái của trang. Do đó, tôi thực hiện chờ đợi thủ công (thread.sleep) sau khi chọn một giá trị để chờ trang thay đổi. và nó hoạt động tốt với Thread.Sleep. Tuy nhiên, Thread.Sleep là một ý tưởng tồi để sử dụng với số lý do chính đáng vì vậy khi tôi đưa ra tất cả các dòng Thread.Sleep tôi mã sau đó tất cả các trường hợp thử nghiệm của tôi sụp đổ và tôi đã cố gắng WebDriverWait, ngầm và Rõ ràng không hoạt động và rất thất vọngWebDriverWait hoặc ImplicitlyWait hoặc ExplictlyWait không có gì hoạt động

dưới đây là đoạn code mẫu mà tôi đã cố gắng ....

// WebDriverWait

public IWebElement WaitForElement(By by) 
{ 
      // Tell webdriver to wait 
      WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30)); 
      wait.PollingInterval = TimeSpan.FromSeconds(2); 
      wait.IgnoreExceptionTypes(typeof(NoSuchElementException), typeof(NoSuchFrameException)); 
      wait.IgnoreExceptionTypes(typeof(StaleElementReferenceException), typeof(StaleElementReferenceException)); 

      IWebElement myWait = wait.Until(x => x.FindElement(by)); 
      return myWait; 
} 

cố gắng này quá:

WebDriverWait wait = new WebDriverWait(new SystemClock(), driver, TimeSpan.FromSeconds(30), TimeSpan.FromMilliseconds(100)); 

// Mặc nhiên:

driver.Manage().Timeouts().ImplicitlyWait(new TimeSpan(0, 0, 30)); 

// Explicit Chờ:

IWebDriver driver = new FirefoxDriver(); 
driver.Url = "http://somedomain/url_that_delays_loading"; 
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30)); 
IWebElement myDynamicElement = wait.Until<IWebElement>((d) => 
    { 
     return d.FindElement(By.Id("someDynamicElement")); 
    }); 

Trả lời

0

cố gắng sử dụng

new WebDriverWait(driver, 30).until(ExpectedConditions.presenseOfElementLocated(byLocator)); 
+0

vâng tôi đã cố gắng nhưng đã không làm việc. –

1

Đây là những gì làm việc cho tôi ->

WebDriverWait wait = new WebDriverWait(browser, new TimeSpan(0, 0, 30)); 

element = wait.Until<IWebElement>((driver) => 
    { 
    return driver.FindElement(By.Name("name_of_element"))); 
    }); 

Bạn cũng có thể làm bằng ID - >

WebDriverWait wait = new WebDriverWait(browser, new TimeSpan(0, 0, 30)); 

element = wait.Until<IWebElement>((driver) => 
    { 
    return driver.FindElement(By.Id("id_of_element"))); 
    }); 

Nếu không nhìn thấy mã, bạn sẽ khó xác định được lý do mã không hoạt động.

+0

cho tôi biết bạn muốn thêm mã nào nữa để tôi có thể dán mã và để tôi thử –

0

Tôi tìm thấy một giải pháp với stackoverflow :) và các công trình này:

click on partialLinkText("Exit") 
remote.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS) 
remote.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS) 
// Thread.sleep(7000) // for js-work 
(new WebDriverWait(remote, 245)).until(presenceOfElementLocated(By.partialLinkText("""Entry for > technician"""))) 
// Thread.sleep(3000) // for js-works 
Các vấn đề liên quan