有没有办法在失败的尝试中使用By定位器在Java中查找WebElement?什么
我正在尝试做的是,在我抓住func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
//
if info[UIImagePickerControllerReferenceURL] != nil{
let imageAssetUrl: URL = (info[UIImagePickerControllerReferenceURL] as? URL)!
print("\(imageAssetUrl)")
let allPhotosOptions = PHFetchOptions()
// sort by create
allPhotosOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
//OriginalImage
allPhotosOptions.predicate = NSPredicate(format: "mediaType = %d", PHAssetMediaType.image.rawValue)
let fetchResult = PHAsset.fetchAssets(withALAssetURLs: [imageAssetUrl], options: allPhotosOptions)
if fetchResult.count > 0 {
let asset = fetchResult.firstObject
}
}
picker.dismiss(animated: true) {
//
}
}
时,查看By locator并在我再次尝试查找元素之前更改它(从id更改为xpath)。我正在使用页面工厂模式和NoSuchElementException
- 我理解在发现WebElement之前它是我将使用的代理对象。
在未找到元素的断点处的Eclipse中的调试视图中,我可以看到By定位器信息,但在代码中我无法提取它。
答案 0 :(得分:0)
这是等待的方法,它将根据轮询时间内是否存在元素(例如10秒)返回true /或false;值得注意的是,如果发现元素早于10秒限制存在,则循环将中断并返回true。当然你可以玩timeOut来达到预期的效果;不要快速(比如2秒),否则你冒着测试的风险偶尔失败,因为桌子还没有加载:
public boolean waitForElement(String elementXpath, int timeOut) {
try{
WebDriverWait wait = new WebDriverWait(driver, timeOut);
boolean elementPresent=wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(elementXpath)).isDisplayed());
System.out.printf("%nElement is present [T/F]..? ")+elementPresent;
}
catch(TimeoutException e1){e1.printStackTrace();elementPresent=false;}
return elementPresent;
}