You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium测试记事本App时sendKeys输入'i'显示'ı'问题求助

问题解决:Selenium测试记事本输入字符不一致及关闭不保存操作

一、输入"iii"变为"ııı"的原因与解决方法

这个问题的核心是系统当前输入法/键盘布局为土耳其语(或其他特殊布局),这类布局中小写字母i对应的输入字符是无点的ı。以下是几种可行的解决方式:

1. 切换至英文键盘布局后输入

在调用sendKeys前,通过系统快捷键切换到英文键盘(Windows下按Win + Space),代码中添加这一步:

// 切换到英文键盘布局
np.textArea().sendKeys(Keys.chord(Keys.WINDOWS, Keys.SPACE));
// 执行输入操作
np.textArea().sendKeys("iii");

2. 使用Actions类模拟输入(更稳定)

直接用sendKeys易受输入法干扰,改用Actions类逐个输入字符:

Actions actions = new Actions(driver);
actions.sendKeys(np.textArea(), "iii").perform();

3. 启动驱动时指定英文键盘布局

使用WinAppDriver时,可在启动配置中指定英文布局,从根源避免问题:

DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("app", "notepad.exe");
// 指定区域为英文(美国)
capabilities.setCapability("locale", "en-US");
// 英文键盘LCID值
capabilities.setCapability("keyboardLayout", "00000409");
driver = new WindowsDriver(new URL("http://127.0.0.1:4723"), capabilities);

二、优化关闭不保存的操作逻辑

原代码的关闭流程可简化,同时需确保弹窗元素定位准确:

1. 修正弹窗元素定位

确认弹窗按钮的定位逻辑,适配中文系统的示例:

// 定位"不保存"按钮
public WebElement dialogDontSave(){
    return driver.findElementByName("不保存"); // 英文系统改为"Don't Save"
}

2. 简化关闭流程

无需重复按Alt+F4,直接关闭后点击"不保存"即可:

@Test
public void testNotepad(){
    System.out.println("test");
    // 执行输入操作(采用上述任一解决输入问题的方法)
    Actions actions = new Actions(driver);
    actions.sendKeys(np.textArea(), "iii").perform();
    
    // 注意:记事本Edit控件需用getAttribute("Value")获取文本,而非getText()
    Assert.assertEquals(np.textArea().getAttribute("Value"), "iii");
    
    // 关闭记事本并选择不保存
    np.textArea().sendKeys(Keys.chord(Keys.ALT, Keys.F4));
    np.dialogDontSave().click();
}

关键提示:记事本的Edit控件无法通过getText()正确获取内容,必须用getAttribute("Value"),这也是可能导致断言失败的潜在原因。

三、完整测试代码示例

import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.winium.DesiredCapabilities;
import org.openqa.selenium.winium.WindowsDriver;
import org.testng.Assert;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import java.net.URL;

public class NotepadTest {
    private WindowsDriver driver;
    private NotepadPage np;

    @BeforeTest
    public void setup() throws Exception {
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("app", "notepad.exe");
        capabilities.setCapability("locale", "en-US");
        capabilities.setCapability("keyboardLayout", "00000409");
        driver = new WindowsDriver(new URL("http://127.0.0.1:4723"), capabilities);
        np = new NotepadPage(driver);
    }

    @Test
    public void testNotepad(){
        System.out.println("test");
        // 使用Actions类执行输入
        Actions actions = new Actions(driver);
        actions.sendKeys(np.textArea(), "iii").perform();
        
        // 用Value属性断言文本内容
        Assert.assertEquals(np.textArea().getAttribute("Value"), "iii");
        
        // 关闭记事本并选择不保存
        np.textArea().sendKeys(Keys.chord(Keys.ALT, Keys.F4));
        np.dialogDontSave().click();
    }

    @AfterTest
    public void teardown(){
        if(driver != null){
            driver.quit();
        }
    }
}

class NotepadPage {
    private WindowsDriver driver;

    public NotepadPage(WindowsDriver driver){
        this.driver = driver;
    }

    public WebElement textArea(){
        return driver.findElementByClassName("Edit");
    }

    public WebElement dialogDontSave(){
        return driver.findElementByName("不保存"); // 英文系统替换为"Don't Save"
    }
}

内容的提问来源于stack exchange,提问作者Kamuransylmz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 14:35:39