我正在尝试填写网站上的文本字段,每次打开网站时ID都会更改。为了避免这种情况,我通过它的类名查找webelement,这看起来效果很好,因为我可以通过它点击它
currentWebElement.Click();
但是,当我尝试通过
填写编辑文本框时currentWebElement.SendKeys("51");
没有任何反应(更重要的是,焦点丢失)
我已经搜索了很多,看看问题是什么,但是找不到解决方案,所以我想知道这里是否有人可以指出我正确的方向。到目前为止我尝试了什么:
1)我正在使用chrome,但由于这似乎是sendKeys的一个常见问题,我已经转向ie,唉问题仍然存在。我已经尝试迁移到Firefox,但没有成功,因为我似乎无法找到firefox.exe的二进制路径,但这应该在另一个问题中解决。所以问题出现在chrome和IE中。
2)使用javascript发送命令,因为我在本网站回答的其他问题中找到了这个建议:
driver.ExecuteScript("arguments[0].value = '51'", currentWebElement);
直接但实现它作为一个函数不起作用:
private static object setValue(this IWebDriver driver, IWebElement element, String value) {
return ((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].value = arguments[1]", element, value);
}
// and then calling it in my code:
setValue(driver, currentWebElement, "51");
所有的实现都没有给我错误或警告(我设法在过程中摆脱了那些),但是没有一个给出了期望的结果,即盒子保持空白,这真的开始让我烦恼!
答案 0 :(得分:1)
尝试以下代码。我已经使用XPATH在字段中发送了Keys( FYI,id的PRMT_TB部分没有改变,即使其余部分每次都这样做,因此xpath ):
var currentWebElement = driver.FindElement(By.XPath("//input[starts-with(@id,'PRMT_TB')]"));
currentWebElement.SendKeys("51");
如果以上操作无效,请尝试以下代码
var currentWebElement = driver.FindElement(By.XPath("//td[@class='clsTextWidgetParseError']/input"));
currentWebElement.SendKeys("51");
答案 1 :(得分:0)
By byCss = By.CssSelector(".clsTextWidgetParseError>input");
var element = Driver.FindElement(byCss );
element.Clear();
element.SendKeys(value);
我假设你使用了错误的选择器。如果抛出任何异常,请提供堆栈跟踪