我正在处理一个要传递值的表格,硒需要将该值与表数据进行比较并选择它。由于表数据是动态的,因此不确定如何处理。请指教
我尝试了以下方法:
public static void awb_origin_dest(String airport_name){
for(int i=0;i<50;i++){
List<WebElement> ele=driver.findElements(By.tagName("td"));
for(int j=0;j<ele.size();j++) {
String listOfValues = ele.get(j).getText();
//System.out.println(listOfValues);
if (listOfValues.contains(airport_name)) {
Actions actions = new Actions(driver);
actions.doubleClick(ele.get(j)).perform();
break;
} else {
continue;
}
}
driver.findElement(By.id("f2ListEnquiry_table_next")).click();
}
}
如果我传递前几页中存在的值,则能够获得所需的值,但循环并没有结束,并给出以下异常:
org.openqa.selenium.NoSuchElementException:无法找到元素 使用CSS选择器==#f2ListEnquiry_table_next
请告知这是正确的方法还是应该尝试其他方法。
答案 0 :(得分:0)
您可以使用此:
public static void awb_origin_dest(String airport_name){
boolean found = false; // this will check if airport was found
for(int i=0;i<50;i++){
List<WebElement> ele=driver.findElements(By.tagName("td"));
for(int j=0;j<ele.size();j++) {
String listOfValues = ele.get(j).getText();
//System.out.println(listOfValues);
if (listOfValues.contains(airport_name)) {
Actions actions = new Actions(driver);
actions.doubleClick(ele.get(j)).perform();
found = true; // catch that airport was found
break; // break inner loop
} else {
continue;
}
}
if (found){ // if found, break the outer loop
break; // break outer loop
}
driver.findElement(By.id("f2ListEnquiry_table_next")).click();
}
}
说明:
如果找到了机场,您将仅打破内部环路,但外部环路仍在循环。这就是为什么我建议引入一个布尔变量来检查是否找到了airport,并且也打破了外部循环(如果确实如此)。希望对您有所帮助。
关于:
org.openqa.selenium.NoSuchElementException: Unable to find element with css selector == #f2ListEnquiry_table_next
WebDriverWait
。这将等待至少10秒钟,直到可以单击按钮,然后才单击它。如果您的脚本过快并会尝试单击尚未准备好接受点击的按钮,这将防止异常。示例:
new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.id("f2ListEnquiry_table_next"))).click();