我有两个绝对位置的div
<div id="4711" style="position:absolute;top:0px;bottom:0px;left:0px;right:0px;background-color:red">Visible later</div>
<div id="4712" style="position:absolute;top:0px;bottom:0px;left:0px;right:0px;background-color:green">To be removed</div>
和一些Javascript(此处未显示),可在一段时间(例如2秒后)从DOM中删除4712。
现在,在我的Selenium测试中,我想检查4711是否可单击。 从用户的角度来看,只有在删除4712之后才能单击它。
所以我尝试了
new WebDriverWait(browserInstance.getWebDriver(), 5).until(ExpectedConditions.elementToBeClickable(By.id("4711")));
但是,即使在删除4712之前,4711始终是可单击的(启用= true,显示= true)。
有什么方法可以检查4711是否真的可点击,即从用户的角度来看是可点击的(理想情况下不使用Javascript)?
答案 0 :(得分:0)
您是否尝试过等待4712的隐身性,然后再检查4711的可单击性。4711在4712仍可见时仍可能注册为可单击状态,这可能是导致问题的原因。
new WebDriverWait(browserInstance.getWebDriver(), 5).until(!ExpectedConditions.elementToBeVisible(By.id("4712")));
new WebDriverWait(browserInstance.getWebDriver(), 5).until(ExpectedConditions.elementToBeClickable(By.id("4711")));
答案 1 :(得分:0)
正如您所提到的, Javascript 删除了元素 4712 ,目前尚不清楚元素变为陈旧还是变为不可见。因此,对于此步骤,您可以使用以下任一选项:
new WebDriverWait(browserInstance.getWebDriver(), 5).until(ExpectedConditions.stalenessOf(driver.findElement(By.id("4712"))));
invisibilityOfElementLocated()
:
new WebDriverWait(browserInstance.getWebDriver(), 5).until(ExpectedConditions.invisibilityOfElementLocated(By.id("4712")));
not
和visibilityOfElementLocated()
new WebDriverWait(browserInstance.getWebDriver(), 5).until(ExpectedConditions.not(ExpectedConditions.visibilityOfElementLocated(By.id("4712"))));
not
和presenceOfElementLocated()
new WebDriverWait(browserInstance.getWebDriver(), 5).until(ExpectedConditions.not(ExpectedConditions.presenceOfElementLocated(By.id("4712"))));
下一步,您要验证元素 4711 是否可单击,可以使用以下代码行:
new WebDriverWait(browserInstance.getWebDriver(), 5).until(ExpectedConditions.elementToBeClickable(By.id("4711")));
注意:元素的状态为 enabled=true
和 displayed=true
并不等同于元素 interactable
,即 clickable