Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 即使默认情况下禁用了按钮,Button.isEnabled()也会返回true_Java_Selenium_Selenium Webdriver_Isenabled - Fatal编程技术网

Java 即使默认情况下禁用了按钮,Button.isEnabled()也会返回true

Java 即使默认情况下禁用了按钮,Button.isEnabled()也会返回true,java,selenium,selenium-webdriver,isenabled,Java,Selenium,Selenium Webdriver,Isenabled,在测试过程中,我遇到了一个路障,我在网页中有一个默认禁用的按钮。我使用SeleniumWebDriver测试按钮是否默认禁用,布尔值始终返回true Boolean buttonStatus = (button XPath).isEnabled 如果有人能帮助我,那就太好了 HTML信息: <div class="commandbutton commandbutton--theme-disabled commandbutton--recommended"> <button

在测试过程中,我遇到了一个路障,我在网页中有一个默认禁用的按钮。我使用SeleniumWebDriver测试按钮是否默认禁用,布尔值始终返回true

Boolean buttonStatus = (button XPath).isEnabled
如果有人能帮助我,那就太好了

HTML信息:

<div class="commandbutton commandbutton--theme-disabled commandbutton--recommended">
<button class="commandbutton-button commandbutton-button--disabled" type="button" tabindex="-1">

isEnabled只能告诉您按钮工作正常,您需要检查class属性以检查按钮是否已启用。

From

对于除禁用输入之外的所有输入,这通常都将返回true 元素

但它也适用于按钮。但是,
isEnabled()
检查
已禁用的属性。如果按钮被JavaScript或任何其他方式禁用,
isEnabled()
将不会检测到它

我猜按钮在启用或禁用时有其他类。例如,当启用时,它可能不会有
commandbutton--disabled
类。你可以查一下

WebElement button = driver.findElement(By.xpath("button XPath"));
String classes = button.getAttribute("class");
boolean isDisabled = classes.contains("commandbutton-button--disabled");

我也有同样的问题。但是我在页面上的元素非常奇怪。其中一些selenium可以单击,尽管它们不可单击;一些selenium不能单击,但可以向它们发送密钥。经过几个小时的思考,我编写了一个通用方法,用于检查元素是否启用

在和程序员交谈之后,我知道,他们在这个页面上使用了一些特殊的Select,它看起来像是带有输入的Div。他说,我可以通过检查Div的属性类来检查它是否被禁用。如果存在“select2 container disabled”,则该输入被禁用

我改变了我的方法。现在看起来是这样的:

 public boolean isNotClickable(WebElement... elements) {
    List<WebElement> elementsChecked = new ArrayList<>();
    List<WebElement> elementsToCheckByClass = new ArrayList<>();
    List<WebElement> elementsToCheckByClick = new ArrayList<>();
    List<WebElement> elementsToCheckBySendKeys = new ArrayList<>();

    for (WebElement checkedElement : elements) {
        log.info("Checking, that element [" + getLocator(checkedElement) + "] is not clickable by isEnabled()");
        if (checkedElement.isEnabled()) {
            elementsToCheckByClass.add(checkedElement);
        } else {
            elementsChecked.add(checkedElement);
        }
    }
    if (!elementsToCheckByClass.isEmpty()) {
        for (WebElement checkedByClassElement : elementsToCheckByClass) {
            log.info("Checking, that element [" + getLocator(checkedByClassElement) + "] is not clickable by class");
            String classOfElement = checkedByClassElement.getAttribute("class");
            List<String> classes = new ArrayList<>(Arrays.asList(classOfElement.split(" ")));
            if (!classes.contains("select2-container-disabled")) {
                elementsToCheckByClick.add(checkedByClassElement);
            } else {
                elementsChecked.add(checkedByClassElement);
            }
        }
    }
    if (!elementsToCheckByClick.isEmpty()) {
        WebDriverWait wait = new WebDriverWait(driverUtils.getDriver(), 1);
        for (WebElement checkedByClickElement : elementsToCheckByClick) {
            log.info("Checking, that element [" + getLocator(checkedByClickElement) + "] is not clickable by clicking it");
            try {
                wait.until(elementToBeClickable(checkedByClickElement));
                elementsToCheckBySendKeys.add(checkedByClickElement);
            } catch (Exception e) {
                elementsChecked.add(checkedByClickElement);
            }
        }
    }
    if (!elementsToCheckBySendKeys.isEmpty()) {
        for (WebElement checkedBySendKeysElement : elementsToCheckBySendKeys) {
            log.info("Checking, that element [" + getLocator(checkedBySendKeysElement) + "] is not clickable by sending keys");
            try {
                checkedBySendKeysElement.sendKeys("checking");
                return false;
            } catch (Exception e) {
                elementsChecked.add(checkedBySendKeysElement);
            }
        }
    }
    return elementsChecked.size() == elements.length;
}
公共布尔值不可单击(WebElement…elements){
List elementsChecked=new ArrayList();
List elementsToCheckByClass=new ArrayList();
List elementsToCheckByClick=newarraylist();
List element stocheckbysendkeys=new ArrayList();
for(WebElement checkedElement:elements){
log.info(“正在检查,该元素[“+getLocator(checkedElement)+”]不可被isEnabled()单击”;
if(checkedElement.isEnabled()){
elementsToCheckByClass.add(checkedElement);
}否则{
元素选中。添加(选中元素);
}
}
如果(!elementsToCheckByClass.isEmpty()){
for(WebElement CheckedByClass元素:elementsToCheckByClass){
log.info(“正在检查,该元素[“+getLocator(checkedByClassElement)+”]不能按类单击”);
字符串classOfElement=checkedByClassElement.getAttribute(“类”);
列表类=新的ArrayList(Arrays.asList(classOfElement.split(“”));
如果(!classes.contains(“select2容器已禁用”)){
elementsToCheckByClick.add(checkedByClassElement);
}否则{
elementsChecked.add(checkedByClassElement);
}
}
}
如果(!elementsToCheckByClick.isEmpty()){
WebDriverWait wait=新的WebDriverWait(driverUtils.getDriver(),1);
for(WebElement由ClickElement选中:Element由Click选中){
log.info(“检查,该元素[“+getLocator(checkedByClickElement)+”]不能通过单击它来单击”);
试一试{
等待.直到(elementToBeClickable(由clickelement选中));
elementsToCheckBySendKeys.add(checkedByClickElement);
}捕获(例外e){
elementsChecked.add(通过ClickElement选中);
}
}
}
如果(!elementsToCheckBySendKeys.isEmpty()){
for(WebElement checkedBySendKeysElement:elementsToCheckBySendKeys){
log.info(“正在检查,该元素[“+getLocator(checkedBySendKeysElement)+”]不能通过发送键单击”);
试一试{
checkedBySendKeysElement.sendKeys(“检查”);
返回false;
}捕获(例外e){
elementsChecked.add(checkedBySendKeysElement);
}
}
}
return elementsChecked.size()==elements.length;
}

请将HTML源代码复制/粘贴为文本,而不是图像。我已将HTML源代码添加到此问题中。isEnabled只能告诉您按钮工作正常。您在说什么?它对我有效。谢谢。