2017-05-29 170 views
0

按鈕點擊拋出異常:OpenQA.Selenium.WebDriverTimeoutException - C#硒(按鈕點擊)

OpenQA.Selenium.WebDriverTimeoutException

我嘗試使用wait.Until(),但不工作。

wait1 = new WebDriverWait(driver, TimeSpan.FromMinutes(2)); 
IWebElement okBtn; 

okBtn = wait1.Until<IWebElement>((d) => 
    { 
     try 
     { 
      okBtn = wait1.Until<IWebElement>((e) => 
      { 
       try 
       { 
        IWebElement element = e.FindElement(By.XPath("//*[@id='btnOk']")); 
        if (element.Displayed) 
        { 
         return element; 
        } 
       } 

       catch (NoSuchElementException) { } 
       catch (StaleElementReferenceException) { } 

       return null; 
      }); 
      MouseClick(driver, okBtn); 
     } 

     catch (WebDriverTimeoutException) { } 
     catch (WebDriverException) { } 

     return null; 
    }); 
MouseClick(driver, okBtn); 

爲同一的HTML代碼:

<input type="button" value="OK" id="btnOK" onclick="ButtonClick(event);" class="btnnormal" accesskey="x" style="margin: 5px; width: 65px;"> 

回答

0

在我看來,像你FindElement是找到一個不同的元素,你在你的HTML代碼顯示一個。

嘗試將其更改爲:

e.FindElement(By.XPath("//*[@id='btnOK']")); 
+0

在這裏,我放在了錯誤的ID。 也有正確的ID,它會發出超時異常。 –

+0

代碼在問題中更新。 –

+0

'if(element.Displayed)'是否評估爲真?或者是以某種方式隱藏的元素? –

0

試試這個代碼:

wait1.Until(ExpectedConditions.ElementToBeClickable(By.Id("btnOK"))); 
okBtn = driver.FindElement(By.Id("btnOk")); 
MouseClick(driver, okBtn); 
+0

使用它會引發'NoSuchElementException'或'StaleElementReferenceException'。因此我爲此添加了try-catch塊。但後來我面臨'TimeoutException' –

+0

@testingqwerty手動按鈕可點擊嗎?等待中的TimeoutException直到此處意味着此按鈕在兩分鐘內不可點擊。 – Kirhgoph

+0

是的,該按鈕可手動點擊。 –