【发布时间】:2018-07-25 06:43:37
【问题描述】:
我想等待在另一个元素的搜索上下文中找到一个元素。
例如,我可能想要搜索特定模式窗口的内容(我在 DOM 中可能有多个,我想要第二个)。
<body>
<div class="modal class1 class2">
<div class="content class3 class4">Stuff</div>
</div>
<div class="modal class1 class2">
<div class="content class3 class4">Stuff2</div>
</div>
</body>
所以我自然想做的是等待modal类找到模态窗口:
var locator = By.CssSelector("div.modal:nth-child(2)");
var modal = new WebDriverWait(currentDriver,defaultTimeout)
.Until(ExpectedConditions.ElementIsVisible(locator))
然后在模态元素中通过content类查找内容:
var content = modal.FindElement(By.CssSelector("div.content"));
问题在于,在我们的被测应用中,模态框的存在并不意味着其内容的存在,如果像上面那样编写,它最多会导致测试失败并出现异常。
那么有没有办法将FindElement 从一个元素包装到等待中?似乎等待将他们的驱动程序作为他们的搜索上下文并且只有它(毕竟是WebDriverWait),所以我不能将它与用于 FindElement 的部分选择器一起使用。我错过了什么吗?
我知道我可以使用 XPath 直接等待内容,但是它有很多丑陋的重复 XPath,每个内容元素一个。而且我不想使用隐式等待,因为我们已经有了显式等待,而且它们不能很好地结合在一起。
【问题讨论】:
标签: c# selenium-webdriver