有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

selenium webdriver找不到与包含Java的字符串匹配

遇到了问题。 代码找不到匹配的等于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个字符最新版本。contains()没有这样做,我不认为

我看到了火柴。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) 个答案

  1. # 1 楼答案

    您的代码有两个问题

    1. Arrays.asList(badcodes)返回一个列表<;字符串>;,虽然code是一个WebElement:您正在比较两种不同的类型,所以check永远不会是真的
    2. 您说code多于三个字符,但不包括列表。包含期望相等

    您可能会混淆字符串。包含和列表。包含

    如果code是字符串myString的子字符串,则myString.contains(code)将返回true ^如果code是列表myList的元素,则{a2}将返回true

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

    你怎么修理它

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