首页 > 解决方案 > 在 Selenium 中,sendKeys() 和 setValue() 方法究竟有何不同?

问题描述

我都用过

WebElement.sendKeys('') 

WebElement.setValue('')

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

我在 Selenium 文档中只能找到“更准确地sendKeys() 模仿用户输入”setValue()。有谁知道引擎盖下到底发生了什么?

标签: seleniumselenium-webdriversendkeyssetattributesetvalue

解决方案


发送键()

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()方法,最接近的匹配似乎是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')");
    

推荐阅读