[英]Selenium webdriver not working for multiple dynamic dropdowns using java
我有多个下拉列表,这些下拉列表是根据条件动态创建的。
我的Java代码::
最初->
WebElement eleOpt = driver.findElement(By.xpath("//*[@id='id_0_" + value1+ "'" + "]/div/div"));
eleOpt.click();
Thread.sleep(200);
WebElement clickSelectedEle = driver.findElement(By.xpath("//custom-select[@id='id_0_" + value1+ "'" + "]/div/div[2]/ul/li[" + Integer.parseInt(value2) + "]"));
clickSelectedEle.click();
注意:value1和value2是动态值,将在方法中传递。
自动单击2个下拉列表,但第三个下拉菜单抛出以下错误:
错误-
org.openqa.selenium.NoSuchElementException:无法找到元素:// custom-select [@ id ='id_0_2'] / div / div [2] / ul / li [0]
HTML代码(角度2):
<caption class="blind">{{a11y}} {{name}}.</caption>
<div class="static" (click)="toggle()">
<div class="selected">
{{name}}
</div>
</div>
<div class="open">
<ul>
<li id='{{option.code}}' (click)="changeval(option.code || option.id)" *ngFor="let option of options; let i = index" [ngClass]="{ 'active' : (selected && selected===i) }">
<caption class="blind">option: {{option.name}}.</caption>
<span>{{option.name}}</span>
</li>
</ul>
</div>
请提出可以做什么。
一种选择是添加硒wait.until条件
WebDriverWait wait = new WebDriverWait(getDriver(), 10);
wait.until(ExpectedConditions.presenceOfElementLocated(By.css("YourCssPath")));
您也可以使用任何By.class,id,...选项,我更喜欢使用By.class或By.id来使用CSS或正则表达式,第一个选项更快
200毫秒实际上是更少的时间。 由于@cralffaro建议使用WebDriverWait或执行操作前应使用FluentWait
FluentWait代码
WebElement waitsss(WebDriver driver, By elementIdentifier){
Wait<WebDriver> wait =
new FluentWait<WebDriver>(driver).withTimeout(60, TimeUnit.SECONDS)
.pollingEvery(1, TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class);
return wait.until(new Function<WebDriver, WebElement>()
{
public WebElement apply(WebDriver driver) {
return driver.findElement(elementIdentifier);
}
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.