【问题标题】:Selenium C# how to get text in IWEbElementSelenium C#如何在IWEbElement中获取文本
【发布时间】:2015-02-13 15:40:08
【问题描述】:

我正在尝试填写网站上的文本字段,每次打开网站时,其 id 都会更改。为了避免这种情况,我通过它的类名查找 webelement,这似乎工作得很好,因为我可以通过

点击它
currentWebElement.Click();

但是,当我尝试通过

填写编辑文本框时
currentWebElement.SendKeys("51");

什么都没有发生(更重要的是,失去了焦点)

我进行了很多搜索以了解问题所在,但未能找到解决方案,因此我想知道这里是否有人可以为我指明正确的方向。到目前为止我尝试过的:

1) 我在 chrome 中工作,但由于这似乎是 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 可能是正确的做法。能否也提供一下html?
  • 相当长的html即:vmm.be/webrap/ibmcognos/cgi-bin/…
  • 我只想看目标元素的html sn-p
  • 然后通过以下方式找到 currentWebElement:var currentWebElement= driver.FindElementByClassName("clsTextWidgetParseError");
  • 你是这个意思吗?

标签: javascript c# selenium


【解决方案1】:

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

【讨论】:

  • 感谢一百万,这有效(在纠正错字后,它应该由 XPath)
  • 哦!我的坏..我已经更新了我的代码。如果这对您有所帮助,请将其标记为答案.. 谢谢.. :)
  • 对不起,我只能接受一个答案是正确的,即使这两种方法似乎都有效(我不知道哪种方法最好,所以我将荣誉授予最快的回答者)。但是感谢您的帮助!
  • 没问题.. 干杯.. :)
  • 我支持你@Subh。您的答案是正确的,并介绍了解决问题的不同方法
【解决方案2】:
By byCss = By.CssSelector(".clsTextWidgetParseError>input");
var element = Driver.FindElement(byCss );
element.Clear();
element.SendKeys(value);

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

【讨论】:

  • 谢谢!这行得通。我不认为我使用了错误的选择器,因为我能够通过使用 .Click() 将光标移到文本字段中
  • 也许也为了将来参考更新错字(FindLElement 应该是 FindElement)。没有足够的声誉来投票,但接受了答案,因为它对我的案例很有用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
  • 2021-12-08
  • 1970-01-01
  • 2020-06-02
  • 2022-01-01
  • 1970-01-01
  • 2021-07-03
相关资源
最近更新 更多