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 楼答案
您的代码有两个问题
Arrays.asList(badcodes)
返回一个列表<;字符串>;,虽然code
是一个WebElement:您正在比较两种不同的类型,所以check
永远不会是真的code
多于三个字符,但不包括列表。包含期望相等李>您可能会混淆字符串。包含和列表。包含
如果
code
是字符串myString
的子字符串,则myString.contains(code)将返回true ^如果code
是列表myList
的元素,则{a2}将返回true在代码中,
Arrays.asList(badcodes).contains(code)
调用列表。包含,并返回false,因为-如您所说-code
比您要比较的任何字符串都长你怎么修理它
code
转换为字符串。您应该知道如何做到这一点,因为您已经在系统中做到了。出来上面是println李>code
与要比较的字符串具有相同的长度。您应该知道如何做到这一点,因为您已经在系统中做到了。出来上面是println李>