我无法使用网络驱动程序在我的应用程序中添加任何值。 我的应用程序正在使用框架。
我可以使用driver.findElement(By.name("name")).clear();
清除文本框的值,但我无法使用driver.findElement(By.name("name")).sendKeys("manish");
添加任何值。 click
命令适用于同一页面上的另一个按钮。
答案 0 :(得分:28)
我之前也遇到过这个问题。但那时我做的是让它发挥作用
myInputElm.click();
myInputElm.clear();
myInputElm.sendKeys('myString');
答案 1 :(得分:3)
在发送密钥之前,请尝试单击文本框。
可能需要在输入前触发该字段上的事件,并希望点击会这样做
答案 2 :(得分:1)
在字段中使用 javascript点击,然后然后使用sendkeys()输入值。 我过去和帧有类似的问题。 Javascript是最好的方式。
答案 3 :(得分:0)
尝试使用Javascript发送密码()。
WebElement element = driver.findElement(By.name("name"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", element);
有关Javascript Executor的更多信息,请访问@ JavascriptExecutor - Selenium
答案 4 :(得分:0)
首先使用----
将驱动程序控制传递给帧 driver.switchTo().frame("pass id/name/index/webelement");
之后执行您要对框架内存在的元素执行的操作 -
driver.findElement(By.name("name")).sendKeys("manish");
答案 5 :(得分:0)
我遇到了同样的问题,其中复制粘贴也不适用于该文本框。 下面的代码对我来说很好 -
WebDriver driver = new FirefoxDriver();
String mobNo = "99xxxxxxxx";
WebElement mobileElementIrs =
driver.findElement(By.id("mobileNoPrimary"));
mobileElementIrs.click();
mobileElementIrs.clear();
mobileElementIrs.sendKeys(mobNo);
答案 6 :(得分:0)
单击该元素也适用于我,但是,我找到的另一个解决方案是使用JavaScript输入值,这不需要元素具有焦点:
var _element= driver.FindElement(By.Id("e123"));
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
js.ExecuteScript("arguments[0].setAttribute('value', 'textBoxValue')", _element);
答案 7 :(得分:0)
当我使用
时,我也有类似的问题providers:
in_memory:
memory:
users:
user1:
password: password1
roles: 'ROLE1'
&#34; text&#34;中的值并没有完全写入输入,想象是&#34; <link rel="prefetch" href="image1.svg">
<link rel="prefetch" href="image2.svg">
&#34;有时写'&#34; P&#34;另一个&#34; Pat&#34;,......所以测试失败
我所做的是修复它是一种解决方法,并使用Javascript
<link rel="preload" href="image1.svg">
<link rel="preload" href="image2.svg">
现在很好
而不是
getDriver().findElement(By.id(idValue)).clear();
getDriver().findElement(By.id(idValue)).sendKeys(text);
使用,
Patrick
这对我有用。
答案 8 :(得分:0)
我遇到了同样的问题,并且能够为此收集以下解决方案:
答案 9 :(得分:0)
在sendkeys()之前使用click()方法[即,在您的情况下:clear(),click(),sendKeys()]
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");
答案 10 :(得分:0)
我最近遇到了类似的问题,尝试了上述一些建议,但没有任何效果。最后,它失败了,进行了蛮力重试,如果输入框未设置为期望的值,则重试。
出于明显的原因,我想避免 thread.sleep ,并看到了失败的不同示例,看起来像是某种竞赛或计时条件。
public void TypeText(string id, string text)
{
const int numberOfRetries = 5;
for (var i = 1; i < numberOfRetries; i++)
{
try
{
if (TryTypeText())
return;
}
catch (Exception)
{
if (i == numberOfRetries)
throw;
}
}
bool TryTypeText()
{
var element = _webDriver.FindElement(By.Id(id));
element.Click();
element.Clear();
element.SendKeys(text);
if (element.TagName.ToLower() == "input"
&& !DoesElementContainValue(element, text, TimeSpan.FromMilliseconds(1000)))
{
throw new ApplicationException($"Unable to set the type the text '{text}' into element with id {id}. Value is now '{element.GetAttribute("value")}'");
}
return true;
}
}
private bool DoesElementContainValue(IWebElement webElement, string expected, TimeSpan timeout)
{
var wait = new WebDriverWait(_webDriver, timeout);
return wait.Until(driver =>
{
try
{
var attribute = webElement.GetAttribute("value");
return attribute != null && attribute.Contains(expected);
}
catch (StaleElementReferenceException)
{
return false;
}
});
}
答案 11 :(得分:-1)
我确实有同样的问题。首先,我按照@andyssundaypink的假设进行了尝试。但这没有帮助。因此,当我在单击元素之前1秒钟添加sleep
时,问题已解决
Thread.sleep(2000);
element = driver.findElement(...);
element.click();
element.clear();
element.sendKeys('abc');
Thread.sleep(1000);
答案 12 :(得分:-2)
通常我会保留一个临时变量。这应该有用。
var name = element(by.id('name'));
name.clear();
name.sendKeys('anything');
希望它有所帮助。