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

标签 selenium selenium-webdriver sendkeys setattribute setvalue

我都用过

WebElement.sendKeys('') 

WebElement.setValue('')

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

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

最佳答案

发送 key ()

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

关于selenium - 在 Selenium 中, sendKeys() 和 setValue() 方法究竟有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54906911/

相关文章:

java - 如何使用 Java 处理 Selenium WebDriver 的身份验证弹出窗口

java - 在没有浏览器焦点的情况下执行基于 WebDriver 的测试

c# - 具有相似元素的 Selenium Webdriver C# 页面

python - 在 Raspberry Pi Zero 上安装 chromium 或 Firefox Webdriver 的可靠方法

ruby - 如何在 Webdriver 中获取 cookie?

c#: "System.InvalidOperationException: Queue empty"和使用 SendKey.SendWait() 时的其他错误

python - 使用 python/selenium 从元素链接中提取部分文本

python - 通过python上的selenium headless chrome下载文件

excel - 替代 InputBox 中的 SendKeys 以选择用户输入最少的单元格

c# - 远程调用时 Powershell SendKeys 访问被拒绝