Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
';sendKeys';无法在Selenium WebDriver中工作_Selenium_Selenium Webdriver - Fatal编程技术网

';sendKeys';无法在Selenium WebDriver中工作

';sendKeys';无法在Selenium WebDriver中工作,selenium,selenium-webdriver,Selenium,Selenium Webdriver,我无法使用WebDriver在我的应用程序中添加任何值。我的应用程序使用框架 我可以用driver.findElement(By.name(“name”)).clear()清除文本框的值,但我无法使用driver.findElement(By.name(“name”)).sendKeys(“manish”)。单击命令适用于同一页面上的另一个按钮。在发送键之前,请尝试单击文本框 您可能需要在输入前触发字段上的事件,希望单击可以完成此操作。使用JavaScript在字段中单击,然后使用sendkey

我无法使用WebDriver在我的应用程序中添加任何值。我的应用程序使用框架


我可以用
driver.findElement(By.name(“name”)).clear()清除文本框的值
,但我无法使用
driver.findElement(By.name(“name”)).sendKeys(“manish”)
单击
命令适用于同一页面上的另一个按钮。

在发送键之前,请尝试单击文本框


您可能需要在输入前触发字段上的事件,希望单击可以完成此操作。

使用JavaScript在字段中单击,然后使用sendkeys()输入值。


我过去也有过类似的框架问题。JavaScript是最好的方法。

尝试使用JavaScript发送密钥()

有关JavaScript Executor的更多信息,请访问
.

首先使用以下方法将驾驶员控制传递到机架:

  driver.switchTo().frame("pass id/name/index/webelement");
之后,对框架内的webelement执行您想要执行的操作:

 driver.findElement(By.name("name")).sendKeys("manish");

我也有这个问题,但后来我通过以下方式解决了这个问题:

myInputElm.click();
myInputElm.clear();
myInputElm.sendKeys('myString');

通常我保留一个临时变量。这应该行得通

var name = element(by.id('name'));
name.clear();
name.sendKeys('anything');

我也遇到了同样的问题,即复制粘贴对该文本框也不起作用

以下代码对我来说运行良好:

WebDriver driver = new FirefoxDriver();
String mobNo = "99xxxxxxxx";
WebElement mobileElementIrs = 
driver.findElement(By.id("mobileNoPrimary"));
mobileElementIrs.click();
mobileElementIrs.clear();
mobileElementIrs.sendKeys(mobNo);

单击元素对我来说也很有效,但是,我发现的另一个解决方案是使用JavaScript输入值,这不需要元素具有焦点:

var _element= driver.FindElement(By.Id("e123"));
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
js.ExecuteScript("arguments[0].setAttribute('value', 'textBoxValue')", _element);

我也有类似的问题,当我使用

getDriver().findElement(By.id(idValue)).clear();
getDriver().findElement(By.id(idValue)).sendKeys(text);
“文本”中的值未完全写入输入。想象一下“
Patrick
”有时会写“P”或另一个“Pat”…因此测试失败

该修复程序是一种变通方法,使用JavaScript:

((JavascriptExecutor)getDriver()).executeScript("$('#" + idValue + "').val('" + value + "');");
现在好了

而不是

driver.findElement(By.id("idValue")).sendKeys("text");
使用


这对我来说很有效。

我也遇到了同样的问题,并为此收集了以下解决方案:

  • 确保元素处于焦点位置→ 首先尝试单击它并输入字符串
  • 如果此输入框有一些动画,应用一些等待,而不是静态的。您可以等待动画之后出现的元素。(我的情况)
  • 您可以使用Actions类进行尝试
  • 在sendkeys()之前,请使用click()方法(例如,在您的示例中:clear()、click()和sendkeys()):


    我最近也遇到了类似的问题,尝试了上面的一些建议,但都没有效果。最后,它采用了蛮力重试,如果输入框未设置为预期值,则重试

    我想避免thread.sleep,原因很明显,我看到了不同的例子,它失败了,看起来像是某种比赛或计时条件

    public void类型文本(字符串id,字符串文本)
    {
    常数int numberOfRetries=5;
    对于(变量i=1;i
    {
    尝试
    {
    var attribute=webElement.GetAttribute(“值”);
    返回属性!=null&&attribute.Contains(应为);
    }
    捕获(StaleElementReferenceException)
    {
    返回false;
    }
    });
    }
    
    你确定你的注意力集中在正确的帧上了吗?你得到了什么错误?你能提供堆栈跟踪吗?是的,我关注的是正确的帧,否则我认为下面的命令不应该工作“driver.findElement(By.name(“name”))).clear()”,在调试器模式下,在执行下面的命令之前,我使用此命令输入了一些清除的值,所以它应该关注正确的帧。同样令人惊讶的是,我在执行以下命令时没有遇到任何错误。show我们可以使用JavaScript单击吗?请建议我如何使用JavaScript单击。如果您能提供代码,我将非常感激。我想说,Javascript永远不应该是“最好的方式”。这应该只是最后的手段。javascript执行的自动化实际上并不是证明应用程序通过用户交互工作,而是证明如果您直接启动javascript,它就可以工作。我总是通过Selenium API尝试很多其他想法,比如使用动作将鼠标移动到字段上等等。(即,通过交互而不是执行来触发javascript。是的。我有一个理论来解释为什么会这样。我认为我们中受此影响的人可能是因为我们试图向其发送密钥的元素位于一个框架中,这可能有助于selenium实现它?谢谢!!谢谢你提到这一点,我将尝试一下。在我的情况下,sendkeys正在工作g部分-它非常缓慢地发送一些角色,然后在完成之前放弃!因此这不是焦点问题。这是另一个非常奇怪的问题。+1对于动画提示,这是我的问题。我在Angular 9中有一个模态对话框,selenium在打开动画之前开始写入输入。看起来好像结尾是o动画打断了sendKeys。在我的例子中,我收到了一些信件,但不是全部。你说的“保留一个临时变量”是什么意思?目的是什么?它应该如何使用?用于什么?是什么
    driver.findElement(By.id("idValue")).sendKeys("text");
    
    ((JavascriptExecutor)getDriver()).executeScript("$('#" + "idValue" + "').val('" + "text" + "');");
    
    driver.findElement(By.name("name")).clear();
    driver.findElement(By.name("name")).click(); // Keep this click statement even if you are using click before clear.
    driver.findElement(By.name("name")).sendKeys("manish");