迭代具有相同属性的输入对象集合:Java Selenium Webdriver
我已经尝试了这里已经提供的一些迭代示例,但是我还不能迭代输入字段集合,所有这些字段都具有相同的标识属性:,和 我需要迭代所有这些对象,并向每个对象添加相同的字符串。 以下代码将字符串分配给输入字段的第一个实例,但不会转移到下一个实例:迭代具有相同属性的输入对象集合:Java Selenium Webdriver,java,loops,selenium,collections,webdriver,Java,Loops,Selenium,Collections,Webdriver,我已经尝试了这里已经提供的一些迭代示例,但是我还不能迭代输入字段集合,所有这些字段都具有相同的标识属性:,和 我需要迭代所有这些对象,并向每个对象添加相同的字符串。 以下代码将字符串分配给输入字段的第一个实例,但不会转移到下一个实例: List<WebElement> allSumInsuredFields = driver.findElements(By.id("ctl00__txtSumInsured")); Iterator<WebElement> itr = al
List<WebElement> allSumInsuredFields = driver.findElements(By.id("ctl00__txtSumInsured"));
Iterator<WebElement> itr = allSumInsuredFields.iterator();
while(itr.hasNext()){
if (driver.findElement(By.id("ctl00_txtSumInsured")).getText().equals("")) ;
driver.findElement(By.id("ctl00_txtSumInsured")).sendKeys("£250000");
itr.next();
}
List allsumsuminsuredfields=driver.findElements(By.id(“ctl00_uutxtsuminsured”);
迭代器itr=allsumsuredfields.Iterator();
while(itr.hasNext()){
if(driver.findelelement(By.id(“ctl00_txtsuminsurated”)).getText()等于(“”);
驱动程序。findElement(通过身份证(“ctl00”)发送钥匙(“250000英镑”);
itr.next();
}
不需要使用额外的迭代器
By byId = By.id("ctl00__txtSumInsured");
//Explicit wait just to make sure the elements are loaded properly
(new WebDriverWait(driver, 10))
.until(ExpectedConditions.presenceOfElementLocated(byId));
List<WebElement> allSumInsuredFields = driver.findElements(byId);
//Now iterate through List and do whatever you want
for(WebElement ele:allSumInsuredFields)
{
if(ele.getAttribute("value").equals(""));
ele.sendKeys("something");
}
我会这样处理: C#
如果Java语法不正确,我深表歉意,但您明白了我的目的。代码的主要问题是,在循环中,您使用
driver.findElement
获取要处理的元素。这不仅会做额外的工作,而且会使您的算法不正确。findElement
方法(单数形式)返回找到的第一个元素。因此,在您的代码中,不管循环迭代多少次,它总是使用您想要的id对第一个元素进行操作
正如Saifur提到的,您应该使用getAttribute(“value”)
来获取input
元素的值。所以你需要这样的东西:
for(WebElement el : driver.findElements(By.id("ctl00__txtSumInsured"))) {
if (el.getAttribute("value").equals(""))
el.sendKeys("something");
}
与Saifur相反,我并不是建议您在此循环之前使用显式等待。您是否需要它,以及它应该采取什么形式,实际上取决于正在测试的应用程序。你在这个问题上说得不够多,无法做出这个决定。额外的、不必要的检查并不是无害的:它会使Selenium脚本变慢。如果您养成了进行不必要检查的习惯,可以在脚本中添加几分钟的运行时间。而一张没有检查正确的东西的支票实际上是有害的 DOM中的
id
属性应该是唯一的。您确定所有元素都具有相同的id
?抱歉,出错了。SumInsurated字段的每个实例都有一个唯一的id:ctl00_wnCore_rptCoverageSelections_ctl01_UnitContainerControl1_ctl00_AnimalDetailInputPanel_TXTSUMInsurated显示ctl01的零件对于该字段的每个实例都会变成ctl02、ctl03等。问题是,我事先不知道这个字段会有多少个实例。OP已经标记了java。用java编写的脚本会更好。
List<IWebElement> allSumInsuredFields = driver.findElements(By.Id("ctl00__txtSumInsured"));
foreach (var element in allSumInsuredFields)
{
if (string.IsNullOrEmpty(element.Text))
{
element.SendKeys("£250000");
}
}
for(WebElement element : allSumInsuredFields)
if (element.getAttribute("value") != null &&
!element.getAttribute("value").isEmpty())
{
element.sendKeys("£250000");
}
for(WebElement el : driver.findElements(By.id("ctl00__txtSumInsured"))) {
if (el.getAttribute("value").equals(""))
el.sendKeys("something");
}