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

时间:2014-12-15 14:03:10

标签: javascript c# selenium

我正在尝试填写网站上的文本字段,每次打开网站时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");

所有的实现都没有给我错误或警告(我设法在过程中摆脱了那些),但是没有一个给出了期望的结果,即盒子保持空白,这真的开始让我烦恼!

2 个答案:

答案 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);

我假设你使用了错误的选择器。如果抛出任何异常,请提供堆栈跟踪