2012-06-28 67 views
0

我無法使用c#使用selenium webdriver單擊SubMenu項目。 我正在使用IE9和FireFox 13. 我已經嘗試過Action Builder,但它不起作用。 它給出了一個錯誤,說元素不能被點擊。Selenium WebDriver SubMenu點擊不起作用

WebDriverWait Wait = new WebDriverWait(webDriver, TimeSpan.FromSeconds(5)); 
    IWebElement menu = Wait.Until((d) => webDriver.FindElement(By.Id("id1"))); 
    IWebElement menuOption = Wait.Until((d)=>webDriver.FindElement(By.Id("ID2"))); 
      Actions builder = new Actions(webDriver); 
      builder.MoveToElement(menu).Build().Perform(); 
      Thread.Sleep(5); 
      //then click when menu option is visible 
      menuOption.Click(); 

我曾經用過甚至和JavaScript: js.ExecuteScript( 「返回$(\」 A:包含( 'ID1')\ 「)鼠標懸停();」); // Mouse hove to main menu
webDriver.FindElement(By.Id(「ID2」))。Click();

請給出一些解決方案點擊隱藏要素

回答

1

你可以使用Expected Conditions等待元素徘徊在它上面後是可點擊(Thread.sleep()幾乎總是不錯的選擇。而5毫秒是不夠的。) 。

docs這個類(ExpectedConditionsOpenQA.Selenium.Support.UI命名空間)被打破,因爲我現在可以看見他們,但如果你能按照上面的鏈接的Java代碼,here是Java的預期條件 - 這真的幾乎一樣在C#中也是如此。

+0

此外,你還沒有非常具體地瞭解你所得到的錯誤以及頁面的外觀,所以我猜測了一下。如果這不能解決你的問題,你可能想分享更多 - HTML/CSS中的菜單/子菜單是怎麼樣的,它是如何出現的,你得到什麼類型的錯誤信息等。 –

1

而不是使用語句Thread.sleep()。確保顯示後,您可以嘗試單擊該元素。

獲得您要單擊的WebElement後,請檢查它是否通過使用ExpectedContition聲明中的isDisplayed()方法顯示,該聲明中@Slanec在上述帖子中討論過。

通過這個,你可以確保你只有在Wait.Until()返回true後點擊元素。即顯示menuOption

我在java中編寫代碼,因爲我不知道C#。但我想你可以弄清楚我想說什麼 -

new WebDriverWait(driver, 60).until(new ExpectedCondition<Boolean>() { 

     public Boolean apply(WebDriver driver) { 


      return driver.findElement(By.Id("ID2")).isDisplayed(); 
     } 
    }); 

我希望這可以幫助你。

+0

請給出一個示例代碼 – Pat

+0

我編輯了上述答案。 –

+0

感謝Hari它適用於Firefox(它點擊子菜單),但對於瀏覽器不斷瀏覽任何原因。 – Pat

相關問題