Selenium C#如何显示禁用元素

时间:2019-04-05 10:50:53

标签: c# selenium selenium-webdriver specflow

我正在检查是否显示了一个元素。我的断言返回的是false,我发现这是因为该元素被禁用了。
我想检查是否显示该元素是启用还是禁用。

我的代码段是(从我们的框架中检查元素是否显示的方法):

public bool IsElementPresent(IWebDriver browser, IWebElement element)
        {
            return utility.Element.IsDisplayed(element).Invoke(browser);
        }


public Func<IWebDriver, bool> IsDisplayed(IWebElement element)
        {
            return driver =>
            {
                try
                {
                    return element.Displayed;
                }
                catch (Exception e)
                {
                    MessageHandler.OutputError(e);
                    return false;
                }
            };
        }

调用IsElementPresent的方法的代码段:

public void CheckSportsLoginDialogIsDisplayed()
        {
            Actions.Verify.IsElementPresent(Browser, SportsLogin).Should().BeTrue();
       }

定位器:

[FindsBy(How = How.CssSelector, Using = "input.loginButton.submitButton.loginSubmit")]
private IWebElement SportsLogin { get; set; }

HTML元素:

<input class="loginButton submitButton loginSubmit disabled" value="Log in" type="submit" disabled="">

如何检查此元素是否存在?禁用还是启用都没有关系。 谢谢, 里亚兹

2 个答案:

答案 0 :(得分:0)

我现在找到了答案。元素位于iFrame中。 IFrame位于HTML树的上方。我不得不切换到它,然后检查该元素是否显示。我的代码现在可以正常工作了。

<iframe name="freebet" id="freebet" src="https://sports.companya.com/freebet" scrolling="auto" style="display: inline; height: 465px;" class="freebet" cd_frame_id_="9c810a320feffc91ad5fde8519f4d0cb"></iframe>

public void CheckSportsLoginDialogIsDisplayed()
    {
        Actions.Navigate.ToFrame(Browser,FrameOption.Default);                        
        Actions.Verify.IsElementPresent(Browser, SportsLogin).Should().BeTrue();            
    }

答案 1 :(得分:-1)

if(SportsLogin != null) // should be null if not present 
{
    bool isDisplayed = SportsLogin.Displayed;
}

或创建扩展

/// <summary>
/// Requires finding element by FindElementSafe(By).
/// Returns T/F depending on if element is defined or null.
/// </summary>
/// <param name="element">Current element</param>
/// <returns>Returns T/F depending on if element is defined or null.</returns>
public static bool Exists(this IWebElement element)
{
    if (element == null)
    { return false; }
    return true;
}

然后您可以像使用它

bool exists = SportsLogin.Exist();