Java方法split拆分\n不生效,如何将Feature File值按换行输入到文本框
问题根因
- 你的Feature File中Status字段的两个值是空格分隔,而非换行符分隔,
split("\n")自然无法拆分出两个独立值 - 代码本身存在多处逻辑漏洞:参数定义为
col,判断时用的是不存在的变量columnKey,取值时又用了colKey,变量完全不对应;循环中每次都定位同一个输入框重复输入,后输入的值会直接覆盖前一个
可行修改方案
方案1:保留换行拆分逻辑,修改Feature File写法
如果确实要按\n拆分,在Cucumber的Feature File中输入换行需要用\n转义,同时代码做对应适配:
- 修改Feature File的Status值:
| Column | Value | | Status | 542567\n785454 |
- 修正代码变量错误、调整输入逻辑:
如果是往同一个多行文本框输入两行内容,不需要循环填充,直接把换行符带上输入即可:
public static void inputvalues(WebDriver driver,Map<String, String> formEntryMap,String col) { // 修正变量名匹配传入的col参数 if(formEntryMap.containsKey(col)) { String inputValue = formEntryMap.get(col).trim(); // 把Feature中传入的转义\n转为实际换行符 inputValue = inputValue.replace("\\n", "\n"); String xPath = XpathofInputfield; inputEntry(driver, xPath, inputValue); } }
方案2:按现有Feature的空格分隔逻辑修改拆分规则
如果不想调整Feature File,直接把拆分规则改成按空格拆分即可:
public static void inputvalues(WebDriver driver,Map<String, String> formEntryMap,String col) { if(formEntryMap.containsKey(col)) { // 按任意空白字符拆分,兼容空格、多空格、制表符等场景 String [] inputInfo = formEntryMap.get(col).trim().split("\\s+"); // 如果是两个独立输入框,要对应不同的XPath,示例如下 for(int i=0; i<inputInfo.length; i++){ // 假设两个输入框的XPath按索引区分,可根据实际页面规则调整 String xPath = XpathofInputfield + "[" + (i+1) + "]"; inputEntry(driver, xPath, inputInfo[i]); } } }
额外注意事项
- 如果是往同一个多行输入框输入多行内容,也可以在每次输入后追加键入换行符(比如Selenium的
Keys.ENTER),不需要拆分后循环输入 - 确认
inputEntry方法的实现是追加输入还是覆盖输入,如果是覆盖输入,循环输入同一个框一定会丢失前一个值
内容的提问来源于stack exchange,提问作者sandy
相关产品推荐
相关产品推荐

