我是const
的新手,需要检查Selenium
Selenium
中的元素是否可点击,因为Java
同时传递element.click()
和{{} 1}}。
我尝试使用以下代码但不能正常工作:
link
需要帮助。
答案 0 :(得分:10)
elementToBeClickable
用于检查元素是否可见并启用,以便您可以单击它。
$sql = 'SELECT * FROM list WHERE d_n =?';
$stmt =$con->prepare($sql);
$stmt->bind_param('s', $_POST['d_n']);
$stmt->execute();
$numrows = $stmt->num_rows;
如果预期条件为真,则返回WebElement
,否则会抛出TimeoutException
,它永远不会返回ExpectedConditions.elementToBeClickable
。
因此,如果您使用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();
同时传递element.click()
和link
这并不意味着元素不可点击,这意味着返回元素label
但可能存在没有事件通过点击操作在元素上执行。
注意: - 我建议您始终先尝试按clicked
,id
,name
和其他定位器查找元素。如果你遇到一些困难,那么使用className
并始终给cssSelector
定位器赋予最后一个优先级,因为它比其他定位器更慢以找到一个元素。
希望它可以帮助你.. :)
答案 1 :(得分:10)
有些情况element.isDisplayed() && element.isEnabled()
会返回true
,但仍然可以点击 元素,因为它被其他元素隐藏/重叠。
在这种情况下,Exception
被抓住了:
org.openqa.selenium.WebDriverException:未知错误:元素不是 点击点(781,704)。其他元素将收到点击:
<div class="footer">...</div>
请改用此代码:
WebElement element=driver.findElement(By.xpath"");
JavascriptExecutor ex=(JavascriptExecutor)driver;
ex.executeScript("arguments[0].click()", element);
它会起作用。
答案 2 :(得分:4)
wait.until(ExpectedConditions)
不会返回null,它会满足条件或抛出TimeoutException
。
您可以检查元素是否已显示并启用
WebElement element = driver.findElement(By.xpath);
if (element.isDisplayed() && element.isEnabled()) {
element.click();
}
答案 3 :(得分:1)
当元素不可点击时,class属性包含disabled
。
WebElement webElement = driver.findElement(By.id("elementId"));
if(!webElement.getAttribute("class").contains("disabled")){
webElement.click();
}
答案 4 :(得分:0)
从源代码中,您可以查看ExpectedConditions.elementToBeClickable()
,它会判断元素是否可见并已启用,因此您可以将isEnabled()
与isDisplayed()
一起使用。以下是源代码。
public static ExpectedCondition<WebElement> elementToBeClickable(final WebElement element) {
return new ExpectedCondition() {
public WebElement apply(WebDriver driver) {
WebElement visibleElement = (WebElement) ExpectedConditions.visibilityOf(element).apply(driver);
try {
return visibleElement != null && visibleElement.isEnabled() ? visibleElement : null;
} catch (StaleElementReferenceException arg3) {
return null;
}
}
public String toString() {
return "element to be clickable: " + element;
}
};
}
答案 5 :(得分:0)
List<WebElement> wb=driver.findElements(By.xpath(newXpath));
for(WebElement we: wb){
if(we.isDisplayed() && we.isEnabled())
{
we.click();
break;
}
}
}
答案 6 :(得分:0)
您必须注意某些事项:
NotFoundException
条件下默认遇到的until
实例。要在返回元素后立即调用click()
,可以使用:
new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("(//div[@id='brandSlider']/div[1]/div/div/div/img)[50]"))).click();
要简单地验证元素是否位于 和 clickable ,请将 WebDriverWait 包裹在try-catch{}
块中如下:
try {
new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("(//div[@id='brandSlider']/div[1]/div/div/div/img)[50]")));
System.out.println("Element is clickable");
}
catch(TimeoutException e) {
System.out.println("Element isn't clickable");
}
如果 WebDriverWait 返回位于和 clickable 元素,但是该元素仍然不可单击,则需要调用{{1 }}方法如下:
executeScript()
答案 7 :(得分:0)
有一个名为“cursor”的 CSS 属性,用于确定当鼠标指针悬停在元素上时要显示的鼠标光标类型。
它用于使元素可点击,因此可用于检查元素是否可点击。
答案 8 :(得分:-1)
在我的情况下,显示和启用不起作用,当元素可见但不可单击时,我为true。
if (AddDocumentButton.Displayed & AddDocumentButton.GetCssValue("cursor").Equals("pointer") & AddDocumentButton.GetCssValue("color").Equals("rgb(22, 172, 0)"))
{
return true;
}
答案 9 :(得分:-3)
begin
@locator.click
@locator.click
return true
rescue
return false
end