- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用通过框架 (Cucumber) 实现的 Selenium WebDriver,我遇到了一个问题,即在对元素执行操作之前等待元素加载。
最初,我想使用隐式等待,但如果一个元素没有立即加载,它就会等待超时。通常情况下,它使我的测试时间比我想要的要长。
然后,我想使用 Explicit wait 使每种情况的等待时间尽可能短。问题是 WebDriverWait.until 中的大多数 ExpectedConditions 正在寻找位于 By 的元素。定位器(它们是 ClassName、CssSelector、Id、LinkText、Name、PartialLinkText、Tagname 或 XPath)。我在用于单击网络元素的一般函数中使用 WebDriverWait.until。我正在测试的网站上的 Webelements 是由 dojo 生成的,没有静态 ID。它们并不总是有其他类型的定位器,或者它们不是静态的。然后,开发人员向网络元素添加了一个名为 data-automation-id 的附加属性。我想在显式等待中使用此属性,但找不到实现它的方法。
我尝试使用以下代码来使用 xpath:
public void clickOnDataAutomationId(String dataautomationid) {
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//" + findDataAutomationId(dataautomationid).getAttribute("tagName") + "[contains(@data-automation-id, '" + dataautomationid + "')]")));
findDataAutomationId(dataautomationid).click();
}
findDataAutomationId() 是一个函数,返回第一个包含 data-automation-id 作为 FluentWebElement 的网络元素。
问题是,如果未立即加载 Web 元素,则 findDataAutomationId 会失败,这使得 WebDriverWait.until 变得毫无意义。您是否看到另一种无需重构网站即可解决“按定位器”问题的方法?
最佳答案
无需使用findDataAutomationId方法检索webelement,您可以直接找到webelement,然后点击它,如下所示:
public void clickOnDataAutomationId(String dataautomationid) {
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[contains(@data-automation-id, '" + dataautomationid + "')]")));
element.click();
}
或者,如果data-automation-id是一个完整的文本而不是一个部分,那么你可以使用下面的代码:
public void clickOnDataAutomationId(String dataautomationid) {
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@data-automation-id, '" + dataautomationid + "')]")));
element.click();
}
关于java - 如何在没有 By 定位器的情况下使用 WebDriverWait.until?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27845405/
我是一名优秀的程序员,十分优秀!