我使用selenium webdriver和java编写脚本。但是,我们几乎没有字段在单击按钮后被禁用。我们需要发现这个领域是否正在获得只读模式。我使用isEnabled
和isDisplayed
但它无法正常工作,系统显示NoSuchElementFound
期望。有没有办法解决这个问题?
答案 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。还要检查您正在访问的元素层,无论它是父级,子级,跨度等。希望这对您也有帮助。谢谢。