如何比较表数据中的值并单击硒

时间:2018-08-13 05:31:44

标签: java selenium selenium-webdriver

我正在处理一个要传递值的表格,硒需要将该值与表数据进行比较并选择它。由于表数据是动态的,因此不确定如何处理。请指教

我尝试了以下方法:

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

请告知这是正确的方法还是应该尝试其他方法。

1 个答案:

答案 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
  • 请确保您有50页,因为您要在代码中迭代50次。
  • 尝试添加WebDriverWait。这将等待至少10秒钟,直到可以单击按钮,然后才单击它。如果您的脚本过快并会尝试单击尚未准备好接受点击的按钮,这将防止异常。

示例:

new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.id("f2ListEnquiry_table_next"))).click();