在使用带有java的selenium webdriver时,如何查找输入字段是否只读

时间:2014-07-07 11:16:38

标签: java javascript selenium-webdriver

我使用selenium webdriver和java编写脚本。但是,我们几乎没有字段在单击按钮后被禁用。我们需要发现这个领域是否正在获得只读模式。我使用isEnabledisDisplayed但它无法正常工作,系统显示NoSuchElementFound期望。有没有办法解决这个问题?

5 个答案:

答案 0 :(得分:3)

你可以在不必执行JS的情况下实现这一点,你需要做的就是获得“ReadOnly”元素的DOM属性,这可以通过以下方式实现:

   WebElement readOnly = driver.findElementBy(locator);
   Assert.assertTrue(readOnly.getAttribute("readOnly").equals("true"),"Element ReadOnly")

希望这会有所帮助......

答案 1 :(得分:1)

使用javascript,您可以获得此属性值,如 -

var isReadOnly = document.getElementById("field").readOnly;
alert(isReadOnly); //displays true OR false

请检查此属性的浏览器兼容性。 :-)

答案 2 :(得分:1)

您可以执行以下步骤。 1.在执行检查之前,使用WebDriverWait等待语句确保元素确实存在。 2.浏览HTML脚本并检查导致HTML元素只读的属性。在我使用该属性的应用程序中,'hasisisd'。当属性“disabled”的值为TRUE时,该元素被禁用。对你而言,它可能是一个不同的属性。然后获取此属性的值,您将看到该元素是启用还是禁用。

的System.out.println(driver.findElement(By.xpath(txt_Username))的getAttribute( “无效”)。);

答案 3 :(得分:0)

此代码正在使用我的应用程序:

public boolean runScript(String str){
        String script ="if($("+'"'+"#City"+'"'+").attr("+'"'+str+'"'+")){return true}else{return false}";
        System.out.println(script);
        JavascriptExecutor js = (JavascriptExecutor) driver;
        return (Boolean) js.executeScript(script);
        }

int k=0;
        do{
            if(!runScript("HouseNo")){
                System.out.println("Field is in readonly mode");
                break;
            }
            Thread.sleep(1000);
        }while(k<60);

答案 4 :(得分:0)

{field0 field1 ...}

Why does Error() have priority over String()

让我们以上面的示例为例,我有一个表格,并且正在使用Chrome的DevTools(或任何其他首选工具)检查元素。假设我有一个禁用字段的css选择器,其值包含“ 777.00”,元素类型“ css选择器”为: #sampleForm> fieldset> div:nth-​​child( 1)> div.col-sm-5.col-md-6>输入

然后检查该元素是否为只读的代码是:

<div class="col-sm-8 col-md-9 currency">
    <input id="test" type="<some type>" value="777.00" class="read-only" readonly="true">
    <input id="some_input_id_here" type="text" value="<some string value here>" name="<some name here>" class="read-only" readonly="true">        
</div>

请注意,我正在访问元素的类层,并在获取元素的“类”属性后使用TestNG assertTrue验证它是否为“只读”。如果元素不是只读的,则asserTrue布尔值将返回false。还要检查您正在访问的元素层,无论它是父级,子级,跨度等。希望这对您也有帮助。谢谢。