我们如何使用Java代码验证Selenium中的字段是否被写保护(即readonly)?
祝你好运
答案 0 :(得分:12)
像这样使用:
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
请注意:
value
来获取输入的文字。答案 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”属性,可以在任何类型的元素上使用。