我们如何使用 ATATA 处理 jQuery 自动完成?
How do we handle jQuery autocomple with ATATA?
这是输入:
这些是预测搜索的结果
我找不到更好的方法来处理 JQuery ATATA 框架中的自动完成输入。
如果没有框架,我可以做这样的事情
private IWebElement SchoolInput => _driver.FindElement(By.Id("autocomplete"));
public void SelectSchool(string school)
{
// Wait for SchoolInput
SchoolInput.SendKeys(school);
SchoolInput.SendKeys(Keys.Delete) // Sometimes, results won't show, so need to delete last char
// Now need to locate results div
var searchResultsDiv = _driver.FindElement(By.Id("ui-id-1"));
// Wait for searchResultDiv
var expectedSchool = _driver.FindElement(By.Xpath($"//li[contains(text(),'{school}')]));
// Wait for expected school
expectedSchool.Click();
}
您可以通过这种方式为 jQuery UI 自动完成创建自定义 Atata 控件 class:
[ControlDefinition("input", ContainingClass = "ui-autocomplete-input", ComponentTypeName = "autocomplete")]
public class JQAutocomplete<TOwner> : Input<string, TOwner>
where TOwner : PageObject<TOwner>
{
[FindByClass("ui-autocomplete", ScopeSource = ScopeSource.Page)]
public UnorderedList<ListItem<TOwner>, TOwner> DropDownItems { get; private set; }
public TOwner Select(string value)
{
Set(value);
return DropDownItems[x => x.Content.Value.Contains(value)].Click();
}
}
然后将其添加到您的页面对象中:
[FindById("autocomplete")]
public JQAutocomplete<_> School { get; private set; }
最后在测试中使用它:
page.School.Select("some value")
在这里您可以找到工作示例源:https://github.com/atata-framework/atata-samples/tree/master/JQueryUI
这是输入:
这些是预测搜索的结果
我找不到更好的方法来处理 JQuery ATATA 框架中的自动完成输入。
如果没有框架,我可以做这样的事情
private IWebElement SchoolInput => _driver.FindElement(By.Id("autocomplete"));
public void SelectSchool(string school)
{
// Wait for SchoolInput
SchoolInput.SendKeys(school);
SchoolInput.SendKeys(Keys.Delete) // Sometimes, results won't show, so need to delete last char
// Now need to locate results div
var searchResultsDiv = _driver.FindElement(By.Id("ui-id-1"));
// Wait for searchResultDiv
var expectedSchool = _driver.FindElement(By.Xpath($"//li[contains(text(),'{school}')]));
// Wait for expected school
expectedSchool.Click();
}
您可以通过这种方式为 jQuery UI 自动完成创建自定义 Atata 控件 class:
[ControlDefinition("input", ContainingClass = "ui-autocomplete-input", ComponentTypeName = "autocomplete")]
public class JQAutocomplete<TOwner> : Input<string, TOwner>
where TOwner : PageObject<TOwner>
{
[FindByClass("ui-autocomplete", ScopeSource = ScopeSource.Page)]
public UnorderedList<ListItem<TOwner>, TOwner> DropDownItems { get; private set; }
public TOwner Select(string value)
{
Set(value);
return DropDownItems[x => x.Content.Value.Contains(value)].Click();
}
}
然后将其添加到您的页面对象中:
[FindById("autocomplete")]
public JQAutocomplete<_> School { get; private set; }
最后在测试中使用它:
page.School.Select("some value")
在这里您可以找到工作示例源:https://github.com/atata-framework/atata-samples/tree/master/JQueryUI