2016-11-30 29 views
0

我想盡快點擊一個按鈕,它沒有選擇「樣式:顯示無」硒對象單元具有和沒有CSS選擇

<div style="display: none;" id="pdp_size_select_container" class="select_size float_left" title="Select a Size"> 
</div> 

眼下,硒是找到按鈕本身,但它試圖點擊,當然沒有發生,因爲它不可用。

new WebDriverWait(driver, TimeSpan.FromMinutes(10)).Until(ExpectedConditions.ElementExists((By.Id("pdp_size_select_container")))); 
     IWebElement sizeselect = driver.FindElement(By.Id("pdp_size_select_container")); 
     sizeselect.Click(); 

我想辦法來搜索具有的ID的元素,並且沒有選擇樣式=「顯示:無;」。

如果您感到困惑,網頁上會隱藏一個按鈕。在某個特定時間,它可供您點擊。但是我正在循環檢查那個時間,並且當它的樣式選擇器消失時,我想循環檢查WEBDRIVERWAIT中的按鈕。

這是實際可用時的代碼,當它在代碼不可用時就是代碼。

<div style="display: none;" id="pdp_size_select_container" class="select_size float_left" title="Select a Size"> 
</div> 

回答

0

您可以嘗試檢查元素是否有「display:block;」很有型。 因此,硒將等待,直到元素不會改變顯示爲「阻止」。

CSS選擇器將是:

"#pdp_size_select_container[style*='display: block;']" 

編輯:

更好地利用:

"#pdp_size_select_container:not([style*='display: none;'])" 

這個選擇器將工作,如果風格並沒有顯示在所有。或者使用來自Y-B原因的解決方案。

+0

所以你說的是即使「檢查元素」中的元素不顯示顯示:塊,它默認顯示塊,我可以找它嗎? – Max

+0

不,但如果他們在這種情況下沒有風格屬性,你可以使用「#pdp_size_select_container:not([style])」 – Poloq

+0

是的,但這是非常脆弱的:元素可能有一天的風格(顏色:紅色或任何東西不涉及它的顯示) –

0

此xpath將顯示沒有屬性style ='display:none'的按鈕。

//div[not(contains(@style, 'display: none'))][id='pdp_size_select_container'] 

它也將工作將按鈕有多種風格,如:

style='display: none; foo: bar; ceci: celà' 
+0

你可以把它作爲(通過。?(「」)我是有點新 – Max

+0

當然這是:'By.xpath(「// div [not(contains(@style,'display:none'))] [id ='pdp_size_select_container']」)' –

0

你可以使用下面的方法,並調用它像下面。然後,一旦xpath正確顯示,請添加下一步,以便執行您希望執行的操作。

  WaitForElementToNotExist("//myxpath']",20, SeleniumDriver); 


     public static void WaitForElementToNotExist(string xpath, int seconds, IWebDriver driver) 
    { 
     WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(seconds)); 
     wait.Until<bool>((d) => 
     { 
      try 
      { 
       // If the find succeeds, the element exists, and 
       // we want the element to *not* exist, so we want 
       // to return true when the find throws an exception. 
       IWebElement element = d.FindElement(By.XPath(xpath)); 
       return false; 
      } 
      catch (NoSuchElementException) 
      { 
       return true; 
      } 
     }); 
    } 
0

我相信所有你需要做的是改變你的等待條件ElementIsVisible

只要元素的有效樣式「顯示:無」,檢查將返回false。

new WebDriverWait(driver, TimeSpan.FromMinutes(10)).Until(ExpectedConditions.ElementIsVisible((By.Id("pdp_size_select_container")))); 
    IWebElement sizeselect = driver.FindElement(By.Id("pdp_size_select_container")); 
    sizeselect.Click();