java Selenium Webdriver -验证文本框是否写保护?

kqhtkvqz  于 2022-12-21  发布在  Java
关注(0)|答案(9)|浏览(154)

如何使用Java代码验证Selenium中的字段是否写保护(即只读)?
最好的问候

7xzttuei

7xzttuei1#

1.* * isEnabled()没有任何通用的只读内容。
1.
* 字符串属性=元素. getAttribute("只读");即使没有"readonly",也不会使您的测试失败。在这种情况下,它返回
null***,但我们需要例外。
像这样使用:

WebElement some_element = driver.findElement(By.id("some_id"));
    String readonly = some_element.getAttribute("readonly");
    Assert.assertNotNull(readonly);

不要验证**getAttribute("readonly"). equals("true")**或类似信息,在不同的浏览器中,它也可能不同。(在IE中readonly ="readonly",在FF中readonly =""等)

kuuvgm7e

kuuvgm7e2#

您可以尝试通过sendkeys()编写一些内容,并检查textbox的value属性是否未更改。

o2g1uqev

o2g1uqev3#

WebElement接口有一个名为isEnabled的函数。

lvmkulzt

lvmkulzt4#

因为我不知道你需要什么检查,我会张贴一些例子,可能是有用的。

driver.findElements(By.cssSelector("input:not([readonly='readonly'])[type='text']"));

=〉返回所有可编辑的文本输入字段

WebElement element = driver.findElement(By.id("username");
//can fail if the attribute is not there
String attribute  = element.getAttribute("readonly");

=〉可能需要try catch块

wyyhbhjk

wyyhbhjk5#

使用selenium-java 2.21.0,您可以检查其是否启用

driver.findElement(By.id("...")).isEnabled()
sqougxex

sqougxex6#

这是一个迟来的答案,但因为我最近正在研究这个问题,我想分享我的解决方案。
我实现了一个测试文本框是否为只读的方法。我正在做一个Django项目,所以代码是Python的,但我相信移植到Java很容易:

from django.contrib.staticfiles.testing import StaticLiveServerTestCase

class MyTest(StaticLiveServerTestCase):

    def setUp(self):
        self.browser = webdriver.Firefox()

    def _is_text_box_read_only(self, web_element):
        old_text = web_element.get_attribute("value")
        web_element.send_keys("test")
        new_text = web_element.get_attribute("value")
        web_element.clear()
        web_element.send_keys(old_text)  # Resume to the previous text
        return old_text == new_text

请注意:
1.您需要使用属性value来获取输入的文本。
1.测试结束后最好继续阅读前面的文章。
1.代码只是展示核心思想的摘录,可能无法运行。

azpvetkf

azpvetkf7#

下面是最适合我的代码。希望这将是有用的

WebElement fieldName = driver.findElement(By.id("enter_id"));
    fieldName.sendKeys("abc");
    String fieldNameVal = fieldName.getAttribute("value");
    if(fieldNameVal.contentEquals("abc")){
    System.out.println("Field is editable");
    }
    else{
    System.out.println("Field is non editable" + fieldNameVal);
    }
x4shl7ld

x4shl7ld8#

我知道这已经得到了答案。但不幸的是,当我面临类似的问题时,我不得不花一些时间来寻找正确的解决方案。
我同意.getAttribute(“readonly”)返回null,但是为了处理它,我写了类似于下面的代码:

public boolean isreadOnly(element) {        
    Boolean readOnly = false;       
    readOnly = ((element.getAttribute("disabled") != null) || (element.getAttribute("readonly") != null));  
    return readOnly;        
}

并致电:

WebElement text = driver.findElement("locator"));  
return isReadOnly(text);
rkkpypqq

rkkpypqq9#

这里是另一个答案,使用javascript

Boolean isEditable = js.executeScript("if(arguments[0].nodeName==='INPUT' || arguments[0].nodeName==='TEXTAREA'){ return !arguments[0].disabled && !arguments[0].readOnly; }else{ return arguments[0].isContentEditable};", webelement);

这个答案是基于https://stackoverflow.com/a/28269518的,并且被简化了一些。在普通的Javascript中,它看起来像这样:

function isEditable(element){
    if(element.nodeName==="INPUT" || element.nodeName==="TEXTAREA"){
        return !element.disabled && !element.readOnly;
    }else{
        return element.isContentEditable;
    }
}

这解决了“readOnly”和“disabled”属性,并且可以用于任何类型的元素。

相关问题