0

我想检查“X”元素是否可见,如果不可见,则单击“Y”按钮,该按钮将显示“X”按钮

我尝试了以下示例

第一个示例,由于“驱动程序”无法找到此定位器而中断。检查此元素是否不可见然后单击另一个按钮以显示它的最佳方法是什么?

if (!(driver.findelement(XBUTTONlocator).Displayed))
{
    driver.Navigate().GoToUrl(VariablesConstants.ManageWizardURL);
    Thread.Sleep(2000);
    YBUTTONlocator.Click();
    Assert.IsTrue(driver.FindElement(By.CssSelector("")).Displayed);
}

我也有这个预期的条件,但我不知道如何在 IF 中实现它,然后采取行动。

public static Func<IWebDriver, bool> InvisibilityOfElementLocated(By locator)
{
    return (driver) =>
    {
        try
        {
            var element = driver.FindElement(locator);
            return !element.Displayed;
        }
        catch (NoSuchElementException)
        {
            return true;
        }
        catch (StaleElementReferenceException)
        {
            return true;
        }
    };

我想验证它是否显示的按钮的 HTML:

<span translate="" class="ng-scope ng-binding">Create Distribution Group</span>
4

2 回答 2

4

driver.FindElement如果找到将返回定位WebElement,否则将抛出NoSuchElementException。您可以使用driver.FindElements. 如果返回的列表为空则元素不存在,如果列表不为空,您可以使用 index 检查元素的可见性

ReadOnlyCollection<IWebElement> elements = driver.FindElements(XBUTTONlocator);
if (elements.Count == 0 || !elements[0].Displayed)
{
}
于 2019-09-12T13:01:25.200 回答
0

尝试/捕获应该工作。

try{
    driver.findelement(XBUTTONlocator).click()
}
catch (NoSuchElementException) {
    YBUTTONlocator.click()
}

相反,您也可以使用 findElements 并检查它的大小是否为 0。

if(driver.findelements(XBUTTONlocator).size > 0) {
    driver.findelements(XBUTTONlocator).click()
} else {
    YBUTTTONlocator.click()
}
于 2019-09-12T14:27:14.077 回答