当前位置 : 首页 » 互动问答 » 正文

设置输入值而不是sendKeys() - selenium webdriver nodejs

分类 : 互动问答 | 发布时间 : 2014-08-30 22:52:13 | 评论 : 5 | 浏览 : 111247 | 喜欢 : 25

我有一个长字符串要测试,sendKeys()需要太长时间。当我尝试设置text的值时,程序崩溃了。我知道Selenium sendKeys()是测试实际用户输入的最佳方式,但对于我的应用程序,它需要花费太多时间。所以我试图避免它。

有没有办法立即设置值?

请参阅此快速示例:

 var webdriver = require('selenium-webdriver');

var driver = new webdriver.Builder()。
   withCapabilities(webdriver.Capabilities.chrome())。
      建立();

driver.get( 'http://www.google.com');

//在google.com上找到搜索输入字段
inputField = driver.findElement(webdriver.By.name('q'));

var longstring =“test”; //为了这个简单的例子,并不是很长

//这有效,但很慢
inputField.sendKeys(longstring);

//没有错误,但没有设置值
inputField.value = longstring;

//输出:TypeError:Object [object Object]没有方法'setAttributes'

inputField.setAttributes(“value”,longstring);

回答(5)

  • 1楼
  • 尝试使用 executeScript method:

     webdriver.executeScript(“document.getElementById('elementID')。setAttribute('value','element的新值')”)设置元素的值;
  • 2楼
  • 使用 .executeScript()扩展Andrey-Egorov的正确答案以结束我自己的问题示例:

     inputField = driver.findElement(webdriver.By.id('gbqfq'));
    driver.executeScript(“arguments [0] .setAttribute('value','”+ longstring +“')”,inputField);
  • 3楼
  • 感谢Andrey Egorov,在我的情况下,python setAttribute 无效,但我发现我可以直接设置属性,

    试试这段代码:

     driver.execute_script(“document.getElementById(' q')。value ='value here'“)
  • 4楼
  • 向文本字段发送大量重复字符的另一种方法(例如,测试字段允许的最大字符数)是键入几个字符,然后重复复制并粘贴它们:

     inputField.sendKeys ( '0123456789');
    for(int i = 0; i <100; i ++){
        inputField.sendKeys(Key.chord(Key.CONTROL,'a'));
        inputField.sendKeys(Key.chord(Key.CONTROL,'c'));
        for(int i = 0; i <10; i ++){
            inputField.sendKeys(Key.chord(Key.CONTROL,'v'));
        }
    }
    

    不幸的是,按下CTRL似乎不适用于IE,除非启用 REQUIRE_WINDOW_FOCUS(这可能会导致其他问题),但它适用于Firefox和Chrome。

  • 5楼
  • 感谢Andrey-Egorov和answer,我设法用C#

     IWebDriver driver = new ChromeDriver();
    IJavaScriptExecutor js =(IJavaScriptExecutor)驱动程序;
    string value =(string)js.ExecuteScript(“document.getElementById('elementID')。setAttribute('value','element的新值')”);

相关阅读:

Remove duplicates from an array of objects in JavaScript

Can I call jquery click() to follow an <a> link if I haven't bound an event handler to it with bind or click already?

Check whether a string matches a regex in JS

jQuery event to trigger action when a div is made visible

Check if user is using IE with jQuery

Resize HTML5 canvas to fit window

How do I replace a character at a particular index in JavaScript?

JavaScript file upload size validation

Converting a string to a date in JavaScript

How to get the data-id attribute?