if语句条件where元素等于元素

时间:2016-10-09 15:47:39

标签: c# visual-studio selenium selenium-webdriver

我正在测试一个包含表格的网页。您可以单击“新建”链接将记录添加到网格中。单击“创建新建”后,将出现一个对话框,其中包含一些文本框,另一个网格以及“取消并保存”按钮。然后,您可以单击一个链接将记录添加到对话框的网格中,这会使另一个对话框显示文本框和“取消”和“保存”按钮。在我的测试级别课程中,我当前单击这些按钮然后等待对话框打开或关闭。我需要为每个按钮制定一个包含点击和等待的通用方法。因此,在我的测试级别上没有两行代码来单击一个元素并等待一个窗口,我会有一行代码处理它。以下是我的困境:

我需要能够应用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();
    }

3 个答案:

答案 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的工作方式相同,我发现它有一段时间了,并且更喜欢它,但这是个人偏好。