在 Selenium 中, sendKeys() 和 setValue() 方法究竟有何不同?

In Selenium how exactly are the sendKeys() and setValue() methods different?

我都用过

WebElement.sendKeys('') 

WebElement.setValue('')

为了在字段中输入文本。绝大多数时间他们的行为似乎相同,但我发现了一些 setValue() 有效但 sendKeys() 无效的情况。

我在 Selenium 文档中只能找到 sendKeys() 'more accurately imitates user input' 然后是 setValue()。有谁知道引擎盖下到底发生了什么?

发送密钥()

sendKeys() is the Java method from WebElement 模拟输入元素,这可能会设置它的值。

  • 定义:

    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@whosebug.com");
    

然而 Java 中没有 setValue() 方法,最接近的匹配似乎是 setAttribute() Java脚本方法。


setAttribute()

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

  • 语法:

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

    • HTML:

      <button>Hello World</button>
      
    • Java脚本:

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