7

我刚刚完成了一个测试脚本并访问了一个相当动态的页面。有问题的页面会出现一个元素(通常是单选按钮或复选框),该元素仅在满足前几页中的某些条件时才会出现。因此,我的测试将访问此页面,与以前的标准无关,我想在处理这些元素“如果”出现时点击页面底部的“继续”元素。我有一些方法可以按 ID 单击元素,到目前为止有以下代码:

 // Selects the "Confirm" button
                IWebElement radioOption = mWebDriver.FindElement(By.Id("Radio_Button_Id"));
                if (radioOption.Displayed)
                {
                    this.ClickElementById("Radio_Button_Id");

                    // Clicks CONTINUE
                    this.ClickElementById("CONTINUE");
                }
                else
                {
                    // Selects CONTINUE
                    this.ClickElementById("CONTINUE");
                }

我正在尝试在此代码中处理如果出现单选按钮,请选择它然后选择继续按钮。此外,如果单选按钮未出现,请忽略它并选择继续按钮。对此的任何帮助将不胜感激。

4

3 回答 3

11

尝试这样的事情:

//Displayed
public static bool IsElementDisplayed(this IWebDriver driver, By element)
{
    IReadOnlyCollection<IWebElement> elements = driver.FindElements(element);
    if (elements.Count > 0)
    {
        return elements.ElementAt(0).Displayed;
    }
    return false;
}

//Enabled
public static bool IsElementEnabled(this IWebDriver driver, By element)
{
    IReadOnlyCollection<IWebElement> elements = driver.FindElements(element);
    if (elements.Count > 0)
    {
        return elements.ElementAt(0).Enabled;
    }
    return false;
}

你不会得到任何异常,然后测试可以继续。

于 2013-09-11T12:45:42.743 回答
1

你说你得到了 NoSuchElementExceptions。radioOption.Displayed测试该元素是否在页面上可见,但如果该元素甚至不存在,它将引发错误。(一个元素可以存在,但不可见)

要测试某个元素是否存在,您需要执行mWebDriver.FindElements(注意 S)。这将返回List<WebElement>与您的选择器匹配的所有元素,如果找不到,它将返回大小为 0 的列表(并且不会引发错误)。

这样,您的 if 语句将是if (radioOptions.size()!=0), 并将检查元素是否存在(而不是它是否可见)。

于 2013-09-10T13:55:08.990 回答
0

我还用它来测试元素是否存在,如果存在则获取元素的句柄:

namespace SeleniumExtensions
{
    public static class WebDriverExtensions
    {
        public static bool TryFindElement(this IWebDriver driver, By by, out IWebElement element)
        {
            try
            {
                element = driver.FindElement(by);

                return true;
            }
            catch (NoSuchElementException)
            {
                element = null;

                return false;
            }
        }

        public static bool IsElementEnabled(this IWebDriver driver, By by)
        {
            IWebElement element = null;

            if (driver.TryFindElement(by, out element))
            {
                return element.Enabled;
            }

            return false;
        }
    }
}

这允许如下代码:

using SeleniumExtensions;

// ...

IWebElement element = null;

if (driver.TryFindElement(By.Id("item-01"), out element)
{
    // use element
}
else
{
     // element is null
}

或者:

if (driver.IsElementEnabled(By.Id("item-01"))
{
    // item is enabled
}
于 2016-04-22T12:41:52.850 回答