我有代码:
public void setList(By localizator, String v_value {
Select some_list = new Select(driver.findElement(localizator));
for(WebElement position_list : some_list.getOptions()) {
if(position_list.getText().equalsIgnoreCase(v_value)) {
some_list.selectByVisibleText(position_list.getText());
break;
}
}
}
如何添加条件:如果selenium找不到position_list.getText()。equalsIgnoreCase(v_value)那么系统抛出新的RuntimeExpression?
答案 0 :(得分:0)
使用iterator
代替foreach
,它提供hasNext()
方法,您可以使用该方法检查您当前是否正在处理列表的最后一个元素。
Iterator<WebElement> iterator = some_list.getOptions().iterator();
然后代替你的foreach:
while(iterator.hasNext()) {
WebElement current = iterator.next();
if(current.getText().equalsIgnoreCase(v_value)) {
current.selectByVisibleText(position_list.getText());
break;
}
if(!iterator.hasNext()){
throw new RuntimeException();
}
}
答案 1 :(得分:0)
只是我在您的代码中看到的建议。
当您使用some_list.selectByVisibleText(position_list.getText());
时,selectByVisibleText(..)
方法已设置为迭代所有可用选项并选择与您传入的文本参数匹配的选项。将调用置于循环中以检查选项如果您想要例外,那么可用是不理想的。
另外,我们假设您有以下代码 -
public void setList(By localizator, String v_value {
Select some_list = new Select(driver.findElement(localizator));
some_list.selectByVisibleText(position_list.getText());
....
}
在这种情况下,selectByVisibleText
会抛出NoSuchElementException("Cannot locate element with text: " + text);
以防该选项无法选择。您应该能够捕获它并抛出运行时异常。
答案 2 :(得分:0)
我想你问题的一个简单答案就是试试
public void setList(By localizator, String v_value {
Select some_list = new Select(driver.findElement(localizator));
for(WebElement position_list : some_list.getOptions()) {
try{
if(position_list.getText().equalsIgnoreCase(v_value)) {
some_list.selectByVisibleText(position_list.getText());
break;
}
}
catch(RuntimeExpression ex)
{
...
}
}
}