Java 即使默认情况下禁用了按钮,Button.isEnabled()也会返回true
在测试过程中,我遇到了一个路障,我在网页中有一个默认禁用的按钮。我使用SeleniumWebDriver测试按钮是否默认禁用,布尔值始终返回trueJava 即使默认情况下禁用了按钮,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
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只能告诉您按钮工作正常。您在说什么?它对我有效。谢谢。