我正在使用页面对象来映射页面中的元素,如下所示:
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选择器选择可见元素?
由于
答案 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);
}