【问题标题】:In Selenium how exactly are the sendKeys() and setValue() methods different?在 Selenium 中,sendKeys() 和 setValue() 方法究竟有何不同?
【发布时间】:2019-07-21 06:14:14
【问题描述】:

我都用过

WebElement.sendKeys('') 

WebElement.setValue('')

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

我在 Selenium 文档中只能找到 sendKeys()“更准确地模仿用户输入”,然后是 setValue()。有谁知道幕后实际发生了什么?

【问题讨论】:

    标签: selenium selenium-webdriver sendkeys setattribute setvalue


    【解决方案1】:

    sendKeys()

    sendKeys() 是来自WebElementJava 方法,用于模拟输入元素,该元素可以设置其值。

    • 定义:

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

    【讨论】:

    • 用户请求的是setValue()而不是setAttribute()
    • setValue() 在与MobileElement 交互时提供,功能上与sendKeys 非常相似
    猜你喜欢
    • 2021-06-20
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    • 2011-05-08
    • 2018-12-16
    • 2017-08-21
    • 1970-01-01
    相关资源
    最近更新 更多