遇到问题。 代码找不到匹配的等于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();
}
答案 0 :(得分:1)
您的代码存在两个问题
Arrays.asList(badcodes)
返回一个List&lt; String&gt;,而code
是一个WebElement:您正在比较两种不同的类型,因此check
永远不会成为现实code
超过三个字符,但List.contains期望相等。你可能会混淆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
比您要比较的任何字符串都要长。
你如何解决?
code
转换为字符串。你应该知道如何做到这一点,因为你已经在上面的System.out.println中做到了。code
的长度与您要比较的字符串相同。你应该知道如何做到这一点,因为你已经在上面的System.out.println中做到了。