我正在尝试获取动态文本并显示它,这会在while循环中执行。它成功显示文本,但在下一次迭代时不会一致显示。
在单击下拉元素后立即给出了隐式等待,以便在UI上更新数据。但我仍然没有得到理想的输出。还有什么我想念的,请告诉我。 此外,当我打印arraylist res_arr的索引时,它输出[]。 我的代码:
while (i<list_size)
{
sl.getOptions().get(i).click();
driver.manage().timeouts().implicitlyWait(100, TimeUnit.SECONDS);
WebElement hcdata = driver.findElement(By.xpath("//form/div/div[3]/div[2]/div[1]/p"));
System.out.println("HCdata: "+hcdata.getText());
ar.add(hcdata.getText());
WebElement freq = driver.findElement(By.xpath("//form/div/div[3]/div[3]/div[1]/p"));
String freq_no = hcdata.getText().toString();
System.out.println("Frequency: "+freq_no);
ar.add(freq_no);
WebElement DT = driver.findElement(By.xpath("//form/div/div[3]/div[4]/div[1]/p"));
String DT_no = hcdata.getText();
System.out.println("DT no: "+DT_no);
ar.add(DT_no);
i++;
res_arr = indexOfAll(0,ar);
System.out.println("Inside arraylist result");
System.out.println(Arrays.toString(res_arr.toArray()));
}
}//end of try
catch(Throwable e){
System.out.println("Error found: "+e.getMessage());
}
输出:
Size is 6
HCdata: 12,865
Frequency: 12,865
DT no: 12,865
Inside arraylist result
[]
HCdata:
Frequency:
DT no: 0
Inside arraylist result
[]
HCdata:
Frequency:
DT no: 0
Inside arraylist result
[]
HCdata:
Frequency:
DT no: 16,479
Inside arraylist result
[]
HCdata:
Frequency:
DT no: 275
Inside IndexofAll method
Inside arraylist result
[]
HCdata:
Frequency:
DT no:
Inside IndexofAll method
Inside arraylist result
[]
答案 0 :(得分:0)
首先,您要对所有三个hcdata
操作使用getText()
。
尝试以下更改:
String freq_no = hcdata.getText().toString();
为:
String freq_no = freq.getText().toString();
和
String DT_no = hcdata.getText();
为:
String DT_no = DT.getText();
第二个问题是隐式等待只等待元素出现,如果它们已经在页面上但没有值,则会立即返回。
您想要的是明确等待。类似的东西:
sl.getOptions().get(i).click();
By hcdataBy = By.xpath("//form/div/div[3]/div[2]/div[1]/p");
//this would wait up to 10 seconds for the wait condition. Change the 2nd parameter if longer or shorter would be better.
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(new ExpectedCondition<Boolean>(){
public Boolean apply(WebDriver d) {
return d.findElement(hcdataBy).getText().length() > 0;
}
});
这是一个自定义预期条件,如果可以的话,最好使用现有的ExpectedConditions
将此更改为使用现有ExpectedConditions
的一种可能方法是:
wait.until(ExpectedConditions.not(ExpectedConditions.textToBePresentInElementLocated(hcdata, "")));
取决于数据加载时getText()
的实际值。
隐式等待要考虑的另一件事是,一旦设置它,您的测试将使用它直到您更改它。因此,如果您在循环的开头设置它,它将在每次测试从那时开始找到元素时使用该隐式等待。这可能会导致一些令人困惑的行为,因为在代码中设置隐式等待时很难跟踪。出于这个原因,以及其他一些时间问题和错误,我建议只使用显式等待。