我试图在Selenium
上执行远程计算机上C#
编写的IE 11
脚本,用于持续集成。我的应用程序有一个div modal-content panel
,其中包含一些字段和一个“保存”按钮。点击保存按钮后,会出现另一个div modal-content popup
。但它仍然隐藏,除非我将鼠标指针悬停在它上面(不只是在屏幕上的任何地方,而是在它上面)。
因此我的剧本失败了。
注意:脚本在我的本地计算机上执行得非常好。也在 远程机器它不会一直显示这个问题!它 随机发生。
请帮忙。
根据我们的自动化框架设计,我们有以下组件:
文件A - 此类文件包含测试步骤 - 调用函数。代码的以下部分点击了编辑链接,更新了一些内容,点击了另一个弹出窗口上显示的“保存”按钮,然后单击模式上的“保存”按钮。
private FormDesigner FormDesigner { set; get; }
// Clicks on the edit link
FormDesigner = FormPanel.ClickEditLink();
// Update a few things
FormDesigner.RemoveFormFields(2);
// Clicks on the Save button
FormDesigner.ClickSave();
// Clicks on the Save button present on the div-modal
FormDesigner.ClickSaveOnSaveForm();
文件B - 此类文件充当包含从文件A调用的所有函数的库。例如,
public FormDesigner ClickEditLink()
{
EditLink.Click();
return new FormDesigner(_webDriver);
}
public void RemoveFormFields(int fieldToRemove)
{
FormDesignerFields(FormFieldRemove).ElementAt(fieldToRemove).Click();
}
public void ClickSaveButton()
{
FormSaveButton.Click();
Thread.Sleep(2000);
}
public void ClickSaveOnSaveForm()
{
SaveFormSaveButton.Click();
Thread.Sleep(2000);
}
文件C - 此类文件包含webelement的所有元素定位器(XPath)。文件B中存在的函数使用这些定位器来执行任何操作。例如,
private const string FormFieldRemove = <XPath>;
private const string FormLnk = <XPath>;
private const string FormDesignerBtn = <XPath>;
private const string SaveFormSaveBtn = <XPath>;
protected Link EditLink
{
get { return new Link(_webDriver.FindElement(By.XPath(FormLnk)), "Edit", true); }
}
private ReadOnlyCollection<IWebElement> FormDesignerFields(string formFields)
{
return _webDriver.FindElements(By.XPath(formFields));
}
protected Button FormSaveButton
{
get { return new Button(_webDriver.FindElement(By.XPath(FormDesignerBtn))); }
}
protected Button SaveFormSaveButton
{
get { return new Button(_webDriver.FindElement(By.XPath(SaveFormSaveBtn))); }
}
文件D - 此类文件包含可在特定Web组件上执行的所有操作。例如,这里我们显示了Button和Link。例如,
按钮类文件:
private const string _buttonXPath = ".//button[contains(.,'{0}')]";
private const string _buttonValueXPath = ".//input[@value='{0}']";
private IWebElement _button;
public Button(IWebElement webElement, string name, bool byValue)
{
_button = byValue ? webElement.FindElement(By.XPath(string.Format(_buttonValueXPath, name))) : webElement.FindElement(By.XPath(string.Format(_buttonXPath, name)));
}
public void Click()
{
_button.Click();
}
链接类文件:
private const string _linkXPath = ".//a[text()='{0}']";
private const string _linkContXPath = ".//a[contains(.,'{0}')]";
private IWebElement _link;
public Link(IWebElement webElement, string value, bool useXpath)
{
_link = useXpath ? webElement.FindElement(By.XPath(string.Format(_linkXPath, value))) : webElement.FindElement(By.XPath(string.Format(_linkContXPath, value)));
}
public void Click()
{
_link.Click();
}