在Selenium中,sendKeys()和setValue()方法到底有什么不同?

时间:2019-02-27 13:45:39

标签: selenium selenium-webdriver sendkeys setattribute setvalue

我都用过

WebElement.sendKeys('') 

WebElement.setValue('')

为了将文本输入字段。在绝大多数情况下,它们的行为似乎相同,但是我发现在某些情况下setValue()有效,而sendKeys()无效。

我在Selenium文档中可以找到的是sendKeys() “更准确地模拟用户输入” ,然后是setValue()。有人知道引擎盖下到底发生了什么吗?

1 个答案:

答案 0 :(得分:1)

sendKeys()

sendKeys()WebElement中的 Java 方法,用于模拟在元素中的键入,该元素可以设置其值。

  • 定义:

    void sendKeys(java.lang.CharSequence... keysToSend)
        Use this method to simulate typing into an element, which may set its value.
    
    Parameters:
        keysToSend - character sequence to send to the element
    
    Throws:
        java.lang.IllegalArgumentException - if keysToSend is null
    
  • 用法:

    driver.findElement(By.id("identifierId")).sendKeys("C.Peck@stackoverflow.com");
    

但是 Java 中没有setValue()方法,最接近的匹配似乎是setAttribute() JavaScript 方法。


setAttribute()

setAttribute() JavaScript 方法,用于设置指定元素上的属性值。如果属性已经存在,则更新值;否则,将添加具有指定名称和值的新属性。

  • 语法:

    Element.setAttribute(name, value);
    
  • 示例:

    • HTML:

      <button>Hello World</button>
      
    • JavaScript:

      var b = document.querySelector("button"); 
      b.setAttribute("name", "helloButton");
      b.setAttribute("disabled", "");
      
  • 通过 Java executeScript()实现:

    ((JavascriptExecutor)driver).executeScript("document.getElementById('elementID').setAttribute('attribute_name', 'new_value_for_element')");