Selenium CSS选择器:visible不是有效的选择器

时间:2013-11-22 18:52:04

标签: css xpath selenium

我正在使用页面对象来映射页面中的元素,如下所示:

public class MyPage {

    protected WebDriver driver;

    @FindBy(css = "a[data-code=panel]:visible")
    private WebElement cpaneladmin;

    public MyPage(WebDriver driver) {
        this.driver = driver;
        PageFactory.initElements(this.driver, this);
    }
}

问题是这个:visible CSS选择器。显然,Selenium不支持它。有没有办法只使用xpath或其他类型的CSS选择器选择可见元素?

由于

4 个答案:

答案 0 :(得分:5)

@FindBy(css = "a[data-code=panel]")
private List<WebElement> cpaneladmin;

然后迭代元素,直到找到显示的元素。

public WebElement FindDisplayed(WebElements elements)
{
    foreach (WebElement element in elements)
    {
        if (element.isDisplayed()) // correct method: isDisplayed()
            return element;
    }
}

答案 1 :(得分:1)

This应该回答你的问题。

如果要验证元素是否可见,请使用element.IsDisplayed(),或使用ExpectedConditions。

答案 2 :(得分:1)

这可能会解决您的问题,

List<WebElement> list = driver.findElements(By.cssSelector("selector_that_matches_one__or_more_elements"));
//do what ever you want with the elements in list

上面的代码将存储所提供的选择器可以找到的所有可见元素 尝试在代码开头使用implicit wait,以使上述语句更有效。

driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

当隐式等待时, findElements()方法将在找到的集合中有超过0个项目时返回,或者如果超时则返回空列表(在上述情况下为30秒)到达了。

答案 3 :(得分:0)

我这个问题来得有点晚,但这是我在C#中解决的方法:

private void AssertAdminIsVisible(OpenQA.Selenium.IWebDriver wd)
{
    OpenQA.Selenium.Support.UI.WebDriverWait wait = new OpenQA.Selenium.Support.UI.WebDriverWait(wd, TimeSpan.FromSeconds(60));
    var cpaneladmin = wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(OpenQA.Selenium.By.CssSelector("a[data-code=panel]")));
    Assert.IsNotNull(cpaneladmin);
}

对于.NET,它来自“ DotNetSeleniumExtras.WaitHelpers” NuGet程序包: enter image description here