Selenium C# 如何在 IWEbElement 中获取文本
本文关键字:获取 取文本 IWEbElement Selenium | 更新日期: 2023-09-27 18:34:13
我正在尝试填写一个网站上的文本字段,每次打开网站时,ID都会更改。为了规避这种情况,我通过它的类名查找 webelement,这似乎工作得很好,因为我能够通过它点击它
currentWebElement.Click();
但是,当我尝试填写编辑文本框时
currentWebElement.SendKeys("51");
什么也没发生(更何况,焦点丢失了(
我已经搜索了很多以查看问题所在,但无法找到解决方案,所以我想知道这里是否有人可以为我指出正确的方向。到目前为止我尝试过:
1(我正在使用chrome,但由于这似乎是我已使用ie的sendKeys的常见问题,唉,问题仍然存在。我尝试迁移到 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");
所有实现都没有给我错误或警告(我在此过程中设法摆脱了它们(,但它们都没有给出预期的结果,即盒子保持空白,这真的开始困扰我了!
试试下面的代码。我已经使用 XPATH 在字段中发送密钥(仅供参考,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");
By byCss = By.CssSelector(".clsTextWidgetParseError>input");
var element = Driver.FindElement(byCss );
element.Clear();
element.SendKeys(value);
我假设您使用了错误的选择器。如果这引发任何异常,请向我提供堆栈跟踪