2015-07-21 81 views
1

我試圖按下網頁上的「網格」類按鈕,但我遇到了麻煩。下面是HTML:如何在Selenium中找到這個元素(按下頁面上的按鈕)?

<li id="prodlist" class="prodtab"> 
    <span> Products</span> 
     <div class="grid" onclick="goToView('productGrid');"></div> 
     <div class="list" onclick="goToView('productList')"></div> 
</li> 

這裏是我的嘗試,但它給org.openqa.selenium.NoSuchElementException

driver.findElement(By.xpath("div[contains(@class, 'grid')]")).click(); 
+0

任何原因您必須使用xpath?爲什麼不是像'driver.findElement(By.cssSelector(「#prodlist .grid」));' – user2718281

+0

這樣的CSS選擇器我不必使用路徑。我想你的代碼,但我得到了同樣的錯誤:異常線程「main」 org.openqa.selenium.NoSuchElementException:找不到元素:{「方法」:「CSS選擇器」,「選擇」:「#產品數.grid」 } –

+0

您是否在該頁面上有動態創建該元素的JavaScript?或者是那個靜態html? – user2718281

回答

1

解決這類問題通常是要麼開關一個IFRAME,如果元素裏面:

WebElement frame = driver.findElement(by.cssSelector("iframe.ajaxStoreNumberAppendSrc")); 
driver.switchTo().frame(frame); 

// then, search for element 
driver.findElement(By.xpath("//div[contains(@class, 'grid')]")).click(); 

或者做出顯式等待等待元素成爲存在:

WebDriverWait wait = new WebDriverWait(webDriver, 5); 
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[contains(@class, 'grid')]"))); 
+0

我剛纔看到他正試圖訪問的頁面,在這種情況下,他試圖在iframe中訪問它。他會想'driver.switchTo().frame(「flyerFrame」);' –

+0

是的,它是在一個框架。由於幀名稱中存在空格,因此無法切換到幀。這裏是html: