不与FIins字符串匹配包含Java

时间:2018-03-14 18:11:21

标签: java selenium-webdriver java-stream

遇到问题。 代码找不到匹配的等于8QQ 的字符串 这是我的完整代码。

            String selector = "div#companyIdBarCompListGrid_rows_scrollpane table tbody tr[id*=companyIdBarCompListGrid_] td span div a";
            int links = driver.findElements(By.cssSelector(selector)).size();
            System.out.println("Number of links: " + links);

            // begin inner for-loop
            for (int i = 0; i < links; i++) {
                PP_OBJ_CycleData.ScrollToTop(driver);// scroll up

                List<WebElement> CCTable = driver.findElements(By.cssSelector(selector));
                WebElement code = CCTable.get(i);           
                System.out.println("\n"+code.getText().substring(0, 3).trim()+"\n");
                //code.click();

             //----------------------checking for bad code -----------------------------------------
                String[] badcodes = {"8QQ", "8BQ", "8JQ"};
                boolean check = Arrays.asList(badcodes).contains(code);
                System.out.println(check);
                //check == true will work as well
                if(check){
                    System.out.println(check+"Bad Code found breaking loop");
                    break;
                }else{

                    //checking to make sure element is clickable
                    PP_OBJ_CycleData.isClickable(code, driver);
                    System.out.println("Clickable?"+ code.isEnabled());
                    code.click();   
                }

我认为这个问题就在这里:

List<WebElement> CCTable = driver.findElements(By.cssSelector(selector));
                WebElement code = CCTable.get(i);           
                System.out.println("\n"+code.getText().substring(0, 3).trim()+"\n");
                //code.click();

除了带有子字符串的前3个字符,我正在切断所有内容,但这是在print语句中。但是字符串实际上比8QQ的数组更长或者字符数更多。这可能是问题,如果有办法绕过它吗?那么它只会尝试匹配前3个字符? the.contains()不会这样做我不会这么想。

我看到了matches.find()方法,但没有取得任何成功。

这是我的代码,现在它的工作必须考虑很长一段时间,我的代码在下面。现在它打破了循环。

                    String selector = "div#companyIdBarCompListGrid_rows_scrollpane table tbody tr[id*=companyIdBarCompListGrid_] td span div a";
                    int links = driver.findElements(By.cssSelector(selector)).size();
                    System.out.println("Number of links: " + links);

                    // begin inner for-loop
                    for (int i = 0; i < links; i++) {
                        PP_OBJ_CycleData.ScrollToTop(driver);// scroll up

                        List<WebElement> CCTable = driver.findElements(By.cssSelector(selector));
                        WebElement code = CCTable.get(i); 
                     // changing code to mcode to look for first 3 characters    
                        String mcode = code.getText().substring(0, 3).trim();
                        System.out.println("\n"+ "modified "+ mcode);
                       // System.out.println("\n"+code.getText().substring(0, 3).trim()+"\n");

                     //----------------------checking for bad code -----------------------------------------
                        String[] badcodes = {"8QQ", "8BQ", "8JQ"};
                        boolean check = Arrays.asList(badcodes).contains(mcode);
                        System.out.println(check+"code in array list");
                        //check == true will work as well
                        if(check){
                            System.out.println(check+"-Bad Code found breaking loop");
                            break;
                        }else{
                            //checking to make sure element is clickable
                            PP_OBJ_CycleData.isClickable(code, driver);
                            System.out.println("Clickable?"+ code.isEnabled());
                            code.click();   
                        }

1 个答案:

答案 0 :(得分:1)

您的代码存在两个问题

  1. Arrays.asList(badcodes)返回一个List&lt; String&gt;,而code是一个WebElement:您正在比较两种不同的类型,因此check永远不会成为现实
  2. 你说code超过三个字符,但List.contains期望相等。
  3. 你可能会混淆String.contains和List.contains。

    如果code 是字符串myString的子字符串

    myString.contains(code)将返回true 如果code 是列表myList 的元素,myList.contains(code)将返回true

    在您的代码中,Arrays.asList(badcodes).contains(code)调用List.contains,并返回false,因为 - 正如您所说 - code比您要比较的任何字符串都要长。

    你如何解决?

    1. code转换为字符串。你应该知道如何做到这一点,因为你已经在上面的System.out.println中做到了。
    2. 确保code的长度与您要比较的字符串相同。你应该知道如何做到这一点,因为你已经在上面的System.out.println中做到了。