Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.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 Selenium Webdriver-验证文本框是否受写保护?_Java_Selenium Webdriver_Webdriver - Fatal编程技术网

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

Java Selenium Webdriver-验证文本框是否受写保护?,java,selenium-webdriver,webdriver,Java,Selenium Webdriver,Webdriver,如何使用Java代码验证Selenium中的字段是否受写保护(即只读) 致以最诚挚的问候您可以尝试通过sendkeys()编写一些内容,并检查textbox的value属性是否未更改 WebElement界面有一个名为的函数。因为我不知道您需要什么检查,所以我将发布一些可能有用的示例 driver.findElements(By.cssSelector("input:not([readonly='readonly'])[type='text']")); =>返回所有可编辑的文本输入字段 Web

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


致以最诚挚的问候

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

WebElement界面有一个名为的函数。

因为我不知道您需要什么检查,所以我将发布一些可能有用的示例

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

=>使用selenium java 2.21.0可能需要一个try-catch块,您可以检查它是否已启用

driver.findElement(By.id("...")).isEnabled()
  • isEnabled()没有任何可只读的常用内容
  • String attribute=element.getAttribute(“只读”)即使没有“readonly”,也不会使您的测试失败。在本例中,它返回null,但我们需要异常
  • 这样使用:

        WebElement some_element = driver.findElement(By.id("some_id"));
        String readonly = some_element.getAttribute("readonly");
        Assert.assertNotNull(readonly);
    
    function isEditable(element){
        if(element.nodeName==="INPUT" || element.nodeName==="TEXTAREA"){
            return !element.disabled && !element.readOnly;
        }else{
            return element.isContentEditable;
        }
    }
    

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

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

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

    这是一个迟来的答案,但因为我最近正在研究这个问题,我想与大家分享我的解决方案

    我实现了一个测试文本框是否为只读的方法。我正在处理一个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
    
    请注意:

  • 您需要使用属性
    来获取输入的文本
  • 最好在测试后恢复到上一个文本
  • 代码只是显示核心思想的摘录。它可能无法运行

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

    下面是另一个答案,使用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);
    
    这个答案是基于和简化了一点。 在常规Javascript中,它将如下所示:

        WebElement some_element = driver.findElement(By.id("some_id"));
        String readonly = some_element.getAttribute("readonly");
        Assert.assertNotNull(readonly);
    
    function isEditable(element){
        if(element.nodeName==="INPUT" || element.nodeName==="TEXTAREA"){
            return !element.disabled && !element.readOnly;
        }else{
            return element.isContentEditable;
        }
    }
    

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

    html中是否有一个属性显示框受到保护?是的-有一个名为“readOnly”的字段。以下详细信息针对该领域——感谢所有回复。不知何故,我尝试了所有这些想法,并实现了我选择的一个。WebElement usernamelement=driver.findElement(By.id(“用户名”);sendKeys(“SampleText”);如何为selenium RC编写?我只使用webdriver和grid2It's Ok:-)无法帮助您。谢谢:-)。我拿到了solution@Tarken:获取元素属性后,需要验证。怎么做?您好,您还需要一个答案吗?您可能希望将旧文本设置回,以防字段可编辑。