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");

所有实现都没有给我错误或警告(我在此过程中设法摆脱了它们(,但它们都没有给出预期的结果,即盒子保持空白,这真的开始困扰我了!

Selenium C# 如何在 IWEbElement 中获取文本

试试下面的代码。我已经使用 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);

我假设您使用了错误的选择器。如果这引发任何异常,请向我提供堆栈跟踪