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

时间:2012-03-19 10:32:15

标签: java selenium-webdriver webdriver

我们如何使用Java代码验证Selenium中的字段是否被写保护(即readonly)?

祝你好运

9 个答案:

答案 0 :(得分:12)

  1. isEnabled()没有任何常见的内容。
  2. String attribute = element.getAttribute(“readonly”); 即使“readonly”缺席,也不会使您的测试失败。在这种情况下,它返回 null ,但我们需要例外。
  3. 像这样使用:

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

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

答案 1 :(得分:4)

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

答案 2 :(得分:3)

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

这是一个迟到的答案,但由于我最近正在研究这个问题,我想分享我的解决方案。

我实现了一种方法来测试文本框是否为只读。我正在开发一个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来获取输入的文字。
  2. 最好在测试后恢复到之前的文本。
  3. 代码只是一个显示核心思想的摘录。它可能无法运行。

答案 5 :(得分:0)

由于我不知道你需要什么检查,我会发布一些可能有用的例子。

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块

答案 6 :(得分:0)

以下代码最适合我。希望这会有用

    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);
    }

答案 7 :(得分:0)

我知道已经回答了。但是不幸的是,当我遇到类似的问题时,我不得不花一些时间来找到正确的解决方案。
我同意.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);

答案 8 :(得分:0)

这是使用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”属性,可以在任何类型的元素上使用。