检查元素在Selenium Java中是否可点击

我是新手,需要检查元素是否可在 中单击,因为传递了 和 .SeleniumSeleniumJavaelement.click()linklabel

我尝试使用以下代码,但它不起作用:

WebDriverWait wait = new WebDriverWait(Scenario1Test.driver, 10);

if(wait.until(ExpectedConditions.elementToBeClickable(By.xpath("(//div[@id='brandSlider']/div[1]/div/div/div/img)[50]")))==null)

答案 1

elementToBeClickable 用于检查元素是否可见并启用,以便您可以单击它。

ExpectedConditions.elementToBeClickable如果预期条件为真,则返回 WebElement,否则它将引发 TimeoutException,它永远不会返回 。null

因此,如果您使用找到一个元素,该元素将始终为您提供可单击的元素,因此无需检查条件,则应尝试如下:-ExpectedConditions.elementToBeClickablenull

WebDriverWait wait = new WebDriverWait(Scenario1Test.driver, 10); 
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("(//div[@id='brandSlider']/div[1]/div/div/div/img)[50]")));
element.click();

正如你所说,传递两者,这并不意味着元素不可点击,它意味着返回的元素,但可能没有事件通过点击操作对元素执行。element.click()linklabelclicked

注意:- 我建议您始终首先尝试通过 , 和其他定位器查找元素。如果您遇到一些查找困难,请使用并始终将定位器作为最后优先级,因为它比其他定位器定位元素慢。idnameclassNamecssSelectorxpath

希望它能帮助你..:)


答案 2

在某些情况下,将返回,但仍然元素将不可单击,因为它被其他元素隐藏/重叠。element.isDisplayed() && element.isEnabled()true

在这种情况下,捕获的是:Exception

org.openqa.selenium.WebDriverException: 未知错误: Element 在点 (781, 704) 不可点击。其他元素将接收单击:<div class="footer">...</div>

请改用以下代码:

WebElement  element=driver.findElement(By.xpath"");  
JavascriptExecutor ex=(JavascriptExecutor)driver;
ex.executeScript("arguments[0].click()", element);

它会起作用。


推荐