从WebDriver传递键盘事件不能正常工作iOS模拟器/设备

时间:2012-04-26 14:40:23

标签: iphone ios unicode webdriver

方案: - 我们有注册表格,通过AJAX检查错误 - 字段是:email,confEmail,fname,lname,pwd,confPwd - 当用户输入“email”字段并选中“confEmail”字段时,会发生错误检查。 “pwd”和“confPwd”字段相同 - 我正在尝试编写模仿用户行为的自动化脚本,用户将在“email”字段中输入“test”,然后选择“下一个”字段“confEmail”。这应该调用AJAX检查并抛出有关“无效的电子邮件地址”的错误

测试配置: - 用Linux编写的测试 - 在Mac上运行iPhone模拟器(当然)

这段代码输入电子邮件地址: driver.findElement(By.cssSelector(Locators.getLocator( “mobilebuy-> emailAddressField”)))的SendKeys( “测试”);

由于sendKeys不会将焦点移离该字段,因此我将TAB / click发送到下一个字段,以便AJAX激活。显然,这样做不起作用。 AJAX永远不会触发,也不会显示任何错误消息。我可以看到,当我在iPhone模拟器中手动模拟它时,它可以工作。

这应该是下一个字段的标签: driver.findElement(By.cssSelector(Locators.getLocator( “mobilebuy-> emailAddressField”)))的SendKeys(Keys.TAB);

OR

这应该点击应激活AJAX的下一个字段: driver.findElement(By.cssSelector(Locators.getLocator( “mobilebuy-> confEmailAddressField”)))点击();

关于如何处理这个问题的任何想法?我通过密切关注,甚至尝试在UNICODE中使用“TAB”键,但是它不能正常工作。

2 个答案:

答案 0 :(得分:1)

首先,只有FirefoxDriver支持Action类(根据http://code.google.com/p/selenium/wiki/TipsAndTricks),但您也应该期望支持InternetExplorerDriver。

使用以下步骤使其工作: - 我有一个Type方法,可以在表单中键入项目 - 此后,我发送一个单击到使用Action类触发Ajax的字段,这似乎正常工作

// (WebDriver, email, confEmail, fname, lname, pwd, confPwd)
TypeRegistrationData(driver, "test/tester@com", "", "", "", "", "");

// action builder that tabs to next field
WebElement we = driver.findElement(By.cssSelector(Locators.getLocator("buy->emailAddressField")));
Actions builder = new Actions(driver);

builder.click(we); // this fires up the ajax that is expected

答案 1 :(得分:0)

尝试使用动作链

Actions builder = new Actions(driver);
builder.keyDown(Keys.TAB).keyUp(Keys.TAB);
builder.build().perform();

如果我真的很绝望,我会尝试使用sendKeys,不一定是在文本字段上,而是在某些父元素上(甚至可能在身体本身上)。