检查Selenium Java中是否可以单击元素

San*_*ppa 12 java selenium automation selenium-webdriver

我是新手Selenium,需要检查元素是否可点击Selenium Java,因为element.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)
Run Code Online (Sandbox Code Playgroud)

需要帮助.

Sau*_*aur 17

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

ExpectedConditions.elementToBeClickable返回WebElement如果预期的条件为真,否则会抛出TimeoutException,它永远不会返回null.

因此,如果您使用ExpectedConditions.elementToBeClickable查找始终为您提供可点击元素的元素,因此无需检查null条件,您应该尝试如下: -

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();
Run Code Online (Sandbox Code Playgroud)

正如你所说的element.click()传递两者link并且label这并不意味着元素不可点击,它意味着返回的元素,clicked但可能是没有事件在元素上执行单击操作.

: -我建议你总是首先试图找到的元素id,name,className和其他定位.如果你遇到一些难以找到然后使用cssSelector并始终给xpath定位器的最后优先级,因为它比其他定位器找到一个元素慢.

希望它可以帮助你.. :)


小智 11

有些情况element.isDisplayed() && element.isEnabled()会返回,true但仍然无法点击元素,因为它被其他元素隐藏/重叠.在这种情况下,Exception抓住的是:

org.openqa.selenium.WebDriverException:未知错误:元素在点(781,704)处无法点击.其他元素将收到点击:...使用>>>>>>><div class="footer">...</div>

它会工作.

  • 这是事实,并且可能在大多数情况下有效,但这不是处理问题的正确方法。首先 - 通过 javascript 单击与通过鼠标单击不同 - 可能存在一些差异,导致测试结果不可靠。其次 - 如果元素重叠且不可单击 - 这意味着用户也无法单击它 - 因此当测试因异常失败时它是正确的,因为用户也无法执行该操作。 (3认同)
  • 这确实是事实,大多数人都没有意识到这一事实! (2认同)

Guy*_*Guy 9

wait.until(ExpectedConditions)不会返回 null,它会满足条件或 throw TimeoutException

您可以检查元素是否显示并启用

WebElement element = driver.findElement(By.xpath);
if (element.isDisplayed() && element.isEnabled()) {
    element.click();
}
Run Code Online (Sandbox Code Playgroud)

  • 在某些情况下,`element.isDisplayed() &amp;&amp; element.isEnabled()` 将返回 `true` 但元素仍然无法点击,因为 Element 被其他元素隐藏/重叠。在这种情况下,捕获的异常是:`org.openqa.selenium.WebDriverException: unknown error: Element is not clickable at point (781, 704)。其他元素将收到点击:&lt;div class="footer"&gt;...&lt;/div&gt;` (13认同)