Java 如何在Selenium中找到该元素(按页面上的按钮)?

Java 如何在Selenium中找到该元素(按页面上的按钮)?,java,html,selenium,selenium-webdriver,webdriver,Java,Html,Selenium,Selenium Webdriver,Webdriver,我试图按下网页上的“网格”类按钮,但遇到了问题。以下是HTML: <li id="prodlist" class="prodtab"> <span> Products</span> <div class="grid" onclick="goToView('productGrid');"></div> <div class="list" onclick="goToView('productLi

我试图按下网页上的“网格”类按钮,但遇到了问题。以下是HTML:

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

这类问题的解决方案通常是切换到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')]")));

有什么理由必须使用xpath吗?为什么不像
driver.findElement(By.cssSelector(“#prodlist.grid”)我不必使用路径。我尝试了你的代码,但我得到了相同的错误:线程“main”org.openqa.selenium.NoSuchElementException中的异常:无法定位元素:{“方法”:“css选择器”,“选择器”:“#prodlist.grid”}你在该页面上有动态创建该元素的javascript吗?或者是静态html?是的,它在一个框架中。由于帧名称中的空格,切换到帧时遇到问题。这是html:我刚刚查看了他试图访问的页面,在本例中,他试图在iframe中访问它。他需要
driver.switchTo().frame(“flyerFrame”)是,它在一个框架中。由于帧名称中的空格,切换到帧时遇到问题。这是html:Parker,我不确定您在哪里看到的框架称为flyerFrame:S@ClaudeBastien我错了,我是从你上一个问题的网站上得到的,顺便说一句,它有相同的产品列表/网格布局。
WebDriverWait wait = new WebDriverWait(webDriver, 5);
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[contains(@class, 'grid')]")));