使用 Selenium 和 C# - 如何在没有 ID 或 NAME 时填充文本框



我知道这将是一个新手问题,但我花了 2 天的时间,我很绝望。

页面上有两个文本框需要填充。它们是:

<input type="text" ng-model="searchCtrl.name" placeholder="Name or CRD#" flex="auto" class="ng-pristine ng-untouched ng-valid flex-auto ng-empty" aria-invalid="false">

<input type="text" id="firm-input" ng-model="searchCtrl.firm" placeholder="Firm Name or CRD# (optional)" flex="auto" class="ng-pristine ng-untouched ng-valid flex-auto ng-empty" aria-invalid="false">

我可以使用以下命令填充第二个文本框:

driver.FindElement(By.Id("acIndividualLocationId")).SendKeys("Sugar Grove, IL");

但如您所见,第一个文本框没有 ID 或 NAME。而且我无法让CssSelector,TagName或XPath工作(不知道为什么(。

我可以填充第二个文本框,然后通过以下方式将焦点移动到第一个文本框:

driver.FindElement(By.Id("acIndividualLocationId")).SendKeys(Keys.Shift + Keys.Tab);

所以这里有一个问题:既然我专注于它,我如何填充第一个文本框???

环境:

  • 视窗 10
  • Visual Studio 2019
  • C#
  • Selenium.WebDriver 3.141.0
  • Selenium.WebDriver.ChromeDriver 83.0.4103.3900

提前感谢...

我理解你的填充 很多时候我遇到这种问题,特别是当有角度的时候,最后我找到了一个解决方案。

在这里你可以使用Xpath或使用Javascript。

1.使用Javascript:

var script = @" try{
var appEleWrap = document.getElementsByClassName(Your class name);
setTimeout(function(){
scopeWrap = angular.element(appEleWrap).scope();
if(!scopeWrap.$$phase){
scopeWrap.$apply(function(){
scopeWrap.searchCtrl.name = '{0}';
scopeWrap.searchCtrl.firm='{1}';
}); 
}
}, 1000);
}catch(e){ alert(e.message); }
";
string evalScript = string.Empty;
evalScript = script.Replace("{0}", "Your Text");
evalScript = evalScript.Replace("{1}", "Your Text");
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
js.ExecuteScript(evalScript);

2.使用Xpath:查找元素列表。 根据索引,您可以填充文本框

var ListOfElm = driver.FindElements(By.XPath("//input[contains(@type,'text')]")).ToList();
if (ListOfElm != null)
{
ListOfElm[0].SendKeys("");//Based on index ok.
ListOfElm[1].SendKeys("");
}

我希望这对你有帮助 谢谢。

相关内容

最新更新