我正在测试一个包含表格的网页。您可以单击“新建”链接将记录添加到网格中。单击“创建新建”后,将出现一个对话框,其中包含一些文本框,另一个网格以及“取消并保存”按钮。然后,您可以单击一个链接将记录添加到对话框的网格中,这会使另一个对话框显示文本框和“取消”和“保存”按钮。在我的测试级别课程中,我当前单击这些按钮然后等待对话框打开或关闭。我需要为每个按钮制定一个包含点击和等待的通用方法。因此,在我的测试级别上没有两行代码来单击一个元素并等待一个窗口,我会有一行代码处理它。以下是我的困境:
我需要能够应用If
条件,其中IWebElement
的传递参数等于某个IWebElement
,但它不允许我这样做。 if
语句由于某种原因找不到匹配项,因此if
语句中的代码永远不会到达。我错过了什么吗?如果没有,是否有解决方法?
注意:使用button.text == SaveOrganizationBtn.Text
是一种解决方法,但在我的特定情况下会失败,因为某些测试中某些按钮可能尚未加载到HTML中(即尚未调用表单),所以if
语句失败了。它永远无法获取Text
属性,因为它无法在第一时间找到该元素。
示例代码:
ClickButton(SaveNetworkBtn);
public void ClickButton(IWebElement button)
{
if (button == SaveOrganizationBtn)
{
SaveOrganizationBtn.Click();
WaitForOrganizationFormToClose();
}
if (button == SaveNetworkBtn)
{
SaveNetworkBtn.Click();
WaitForNetworkFormToClose();
}
答案 0 :(得分:0)
对您的方案使用Equals()
方法。 ==
不适用于此。您需要将其检查为if(button.Equals(SaveOrganizationBtn))
。其结果为true
,如果它是同一个对象,则返回false。
我希望,它会对你有帮助。
答案 1 :(得分:0)
我找到了一个解决方案,不管它看起来多么尴尬。如果没有其他人提供更好的解决方案,我会将此标记为答案。
ClickButton(SaveNetworkBtn);
public bool ClickButton(IWebElement button)
{
bool buttonClicked = false;
if (Driver.FindElements(By.Id("SaveOrg-Button-ID")).Count > 1)
{
if (button == SaveOrganizationBtn)
{
SaveOrganizationBtn.Click();
WaitForOrganizationFormToClose();
buttonClicked = true;
return buttonClicked;
}
}
if (Driver.FindElements(By.Id("SaveNet-Button-ID")).Count > 1)
{
if (button == SaveNetworkBtn)
{
SaveNetworkBtn.Click();
WaitForNetworkFormToClose();
buttonClicked = true;
return buttonClicked;
}
}
return buttonClicked;
}
答案 2 :(得分:0)
我不完全了解你的情况,但似乎这样的事情可能有用......你必须做出决定。不要传入button
,只需检查页面上是否存在按钮,如果确实...单击它。
ClickButton();
public bool ClickButton()
{
IReadOnlyCollection<IWebElement> saveOrg = Driver.FindElements(By.Id("SaveOrg-Button-ID"));
if (saveOrg.Any())
{
saveOrg.ElementAt(0).Click();
WaitForOrganizationFormToClose();
return true;
}
IReadOnlyCollection<IWebElement> saveNet = Driver.FindElements(By.Id("SaveNet-Button-ID"));
if (saveNet.Any())
{
saveNet.ElementAt(0).Click();
WaitForNetworkFormToClose();
return true;
}
return false;
}
注意:.Any()
的工作方式与.Count > 0
的工作方式相同,我发现它有一段时间了,并且更喜欢它,但这是个人偏好。