想要在Appium中从右向左滑动视图,我尝试使用坐标,并且还动态尝试过,但是不可能滑动视图,每当我滑动视图时,都会出现一个图标,我想单击图标。
我的测试用例已执行,但无法滑动视图。 我通过使用co_ordinates尝试了TouchAction。
Boolean found_result = false;
String a = "offlin";
List<AndroidElement> listele = driver.findElementsByClassName("android.widget.LinearLayout");
System.out.println("swipe = "+listele.size());
int size=0;
size = size+listele.size();
AndroidElement slider = listele.get(0);
Point startButtonPoint = slider.getLocation();
Dimension startButtonDimenstion = slider.getSize();
int y = startButtonPoint.getY() + startButtonDimenstion.getHeight()/2;
int xStart = startButtonPoint.getX() + (int)(startButtonDimenstion.getWidth() * 0.7);
int xEnd = (int)(startButtonPoint.getX() * 0.3);
System.out.println("lists ele size"+size);
for (int i = 0; i < size; i++) {
String s = listele.get(i).getText();
if (s.equals(a)) {
found_result =true;
driver.swipe(xStart, y, xEnd, y, 2000);
System.out.println("found : "+size);
break;
}
}
if(!found_result){
System.out.println("swipped cond");
}
正如我期望的那样,要从右向左滑动视图,并在看到一个视图后,想要单击该视图以完成任务。
答案 0 :(得分:1)
您可以考虑执行mobile:swipe
command,例如:
[HttpPost]
[AllowAnonymous]
public IActionResult Search([FromBody] SearchModel model)
{ try
{ var query = _service.AllAsQueryable;
if (model != null)
{
if (!string.IsNullOrEmpty(model.Keyword))
{
var keyword = model.Keyword.ToLower();
query = query.Where(a => a.BuildTitle.ToLower().Contains(keyword) ||
a.Description.ToLower().Contains(keyword) ||
a.ZipCode.ToLower().Contains(keyword) ||
// (a.Country != null && a.Country.Localizations.Any(b => b.Name.ToLower().Contains(keyword))) ||
(a.Region != null && a.Region.Localizations.Any(b => b.Name.ToLower().Contains(keyword))) ||
(a.District != null && a.District.Localizations.Any(b => b.Name.ToLower().Contains(keyword))) ||
(a.Zone != null && a.Zone.Localizations.Any(b => b.Name.ToLower().Contains(keyword))));
}
if (model.RegionId.HasValue && model.RegionId > 0)
query = query.Where(a => a.RegionId == model.RegionId);
if (model.DistrictId.HasValue && model.DistrictId > 0)
query = query.Where(a => a.DistrictId == model.DistrictId);
if (model.ZoneId.HasValue && model.ZoneId > 0)
query = query.Where(a => a.ZoneId == model.ZoneId);
if (model.ClientTypeId.HasValue && model.ClientTypeId > 0)
query = query.Where(a => a.ClientTypeId == model.ClientTypeId);
if (model.PriceFrom.HasValue)
query = query.Where(a => a.OwnerPrice >= model.PriceFrom);
if (model.PriceTo.HasValue && model.PriceTo > 0)
query = query.Where(a => a.OwnerPrice <= model.PriceTo);
if (model.Size != null && model.Size.SizeNameId > 0)
{
query = query.Where(a => a.SizeNameId == model.Size.SizeNameId);
if (model.Size.SizeFrom.HasValue)
query = query.Where(a => a.SizeNameId == model.Size.SizeNameId && a.Size >= model.Size.SizeFrom && a.Size <= model.Size.SizeTo);
}
if (model.BuildActionTypes?.Length > 0)
query = query.Where(a => a.BuildAction != null && model.BuildActionTypes.Contains(a.BuildAction.Id));
if (model.BuildTypes?.Length > 0)
query = query.Where(a => a.BuildType != null && model.BuildTypes.Contains(a.BuildType.Id));
if (model.Rooms?.Length > 0)
{
foreach (var room in model.Rooms)
{
query = query.Where(a => a.BuildingRooms.Any(b => b.RoomType == room.Type && room.Count.Contains(b.RoomCount)));
}
}
switch (model.SortType)
{
case SortType.Asc:
query = query.OrderBy(a => a.OwnerPrice);
break;
case SortType.Desc:
query = query.OrderByDescending(a => a.OwnerPrice);
break;
case SortType.Newest:
query = query.OrderByDescending(a => a.CreatedDate);
break;
}
if (model.Points != null)
{
query = query.Where(a => a.Latitude.HasValue && a.Latitude >= model.Points.X1 && a.Latitude <= model.Points.X2 &&
a.Longitude.HasValue && a.Longitude >= model.Points.Y1 && a.Longitude <= model.Points.Y2);
}
}
var totalCount = query.Count();
var result = query.Skip(model.PageSize * (model.CurrentPage - 1))
.Take(model.PageSize)
.AsEnumerable()
.Select(a =>
{
var building = a.MapTo<BuildingShortDetailsViewModel>();
building.LoadEntity(a);
return building;
});
var searchResult = new SearchResult
{
Filter = model,
Locations = query.Select(a => new LocationModel
{
BuildingId = a.Id,
Latitude = a.Latitude.ToString(),
Longitude = a.Longitude.ToString(),
OwnerPrice= a.OwnerPrice,
Size= a.Size,
SizeName= a.SizeName.Id,
BuildingPhotos= a.BuildingPhotos,
BuildAction=a.BuildAction.Id,
}),
Buildings = result,
TotalCount = totalCount
};
return Ok(searchResult);
}
catch (Exception ex)
{
return BadRequest($"Error occured while getting search result. Error: {ex.Message}. StackTrace: {ex.StackTrace}");
}
}
如果您的测试仅适用于Android,则可以考虑执行mobile:shell
command
JavascriptExecutor js = (JavascriptExecutor) driver;
Map<String, Object> params = new HashMap<>();
params.put("direction", "down");
params.put("element", ((RemoteWebElement) element).getId());
js.executeScript("mobile: swipe", params);
最后但并非最不重要的一点,您可以使用提供SeeTest Appium Extension
的Swipe commandMap<String, Object> args = new HashMap<>();
args.put("command", "input");
args.put("args", Lists.newArrayList("swipe", "startX","startY","endX","endY"));
driver.executeScript("mobile: shell", args);
答案 1 :(得分:0)
使用以下代码在可用视图中执行向右滑动。
MobileElement element_to_be_swiped=driver.findElement("//xpathtothelinearpath")
Point elementLoc = elememt_to_be_swiped.getLocation();
int eleX = elementLoc.getX() + 5;
int eleY = elementLoc.getY() + 5;
Dimension elementDimen = elememt_to_be_swiped.getSize();
int eleH = elementDimen.getHeight();
int eleW = elementDimen.getWidth();
Dimension size = driver.manage().window().getSize();
int x = (int)(eleX + eleW * 0.5D);
int y = (int)(eleY + eleH * 0.5D);
TouchAction<?> action = new TouchAction(driver);
action.press(PointOption.point(x, y)).moveTo(PointOption.point(width - 5, y)).release().perform();
答案 2 :(得分:0)
下面是我用来滚动和滑动的代码。请注意,有一个主滚动方法,该方法使用由四个方向滚动/滑动方法中的每个方法计算出的适当参数来调用。
/**
* This method scrolls based upon the passed parameters
* @author Bill Hileman
* @param int startx - the starting x position
* @param int starty - the starting y position
* @param int endx - the ending x position
* @param int endy - the ending y position
*/
@SuppressWarnings("rawtypes")
public void scroll(int startx, int starty, int endx, int endy) {
TouchAction touchAction = new TouchAction(driver);
touchAction.longPress(PointOption.point(startx, starty))
.moveTo(PointOption.point(endx, endy))
.release()
.perform();
}
/**
* This method does a swipe upwards
* @author Bill Hileman
*/
public void scrollDown() {
//The viewing size of the device
Dimension size = driver.manage().window().getSize();
//Starting y location set to 80% of the height (near bottom)
int starty = (int) (size.height * 0.80);
//Ending y location set to 20% of the height (near top)
int endy = (int) (size.height * 0.20);
//x position set to mid-screen horizontally
int startx = (int) size.width / 2;
scroll(startx, starty, startx, endy);
}
/**
* This method does a swipe left
* @author Bill Hileman
*/
public void swipeLeft() {
//The viewing size of the device
Dimension size = driver.manage().window().getSize();
//Starting x location set to 95% of the width (near right)
int startx = (int) (size.width * 0.95);
//Ending x location set to 5% of the width (near left)
int endx = (int) (size.width * 0.05);
//y position set to mid-screen vertically
int starty = size.height / 2;
scroll(startx, starty, endx, starty);
}
/**
* This method does a swipe right
* @author Bill Hileman
*/
public void swipeRight() {
//The viewing size of the device
Dimension size = driver.manage().window().getSize();
//Starting x location set to 5% of the width (near left)
int startx = (int) (size.width * 0.05);
//Ending x location set to 95% of the width (near right)
int endx = (int) (size.width * 0.95);
//y position set to mid-screen vertically
int starty = size.height / 2;
scroll(startx, starty, endx, starty);
}
/**
* This method does a swipe downwards
* @author Bill Hileman
*/
public void scrollUp() {
//The viewing size of the device
Dimension size = driver.manage().window().getSize();
//Starting y location set to 20% of the height (near bottom)
int starty = (int) (size.height * 0.20);
//Ending y location set to 80% of the height (near top)
int endy = (int) (size.height * 0.80);
//x position set to mid-screen horizontally
int startx = size.width / 2;
scroll(startx, starty, startx, endy);
}