从WebElement代理获取定位器

时间:2017-04-24 09:54:24

标签: java selenium appium

有没有办法在失败的尝试中使用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定位器信息,但在代码中我无法提取它。

1 个答案:

答案 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;   
 }