PageFactory кажется медленным при использовании в автоматизации Appium iOS - PullRequest
0 голосов
/ 09 марта 2019

Мы автоматизируем родное iOS-приложение, используя Appium. Мы используем шаблон проектирования PageFactory. Для нажатия на элемент, это код, который я использую:

  1. Ожидание видимого элемента.
  2. Нажав на элемент

public  Boolean waitUntilVisible(WebElement element)
{
	try {
		wait.until(ExpectedConditions.visibilityOf(element));
		return true;
	}catch (Exception e)
	{}
	return false;
}

public boolean click(WebElement element)
{
	//Click on the element and return true if successful and false if unsuccessful.
	try 
	{
        waitUntilVisible(element);
		element.click();
	} catch (Exception e) {}
	return false;
}

Общее выполнение, похоже, занимает слишком много времени. Насколько я понимаю, waitUntilVisible ждет, пока isDisplayed () элемента не станет истинным.
Поскольку мы используем PageFactory, я предполагаю, что идентификация элемента происходит дважды.
1. Элемент будет идентифицирован в первую очередь перед проверкой на видимость.
2. Тот же элемент будет идентифицирован еще раз до нажатия кнопки.

Поскольку мы используем xpath во многих областях, идентификация элемента обычно занимает больше времени. Для простого щелчка один и тот же элемент идентифицируется дважды, что еще больше увеличивает время.

Я хочу знать какое-либо решение для хранения идентифицированного элемента, чтобы оно не тратило время на его идентификацию.

Поэтому я изменил свой код, как показано ниже:

public  WebElement waitUntilVisible(WebElement element)
{
	try {
		return wait.until(ExpectedConditions.visibilityOf(element));
	}catch (Exception e)
	{}
	return null;
}

public boolean click(WebElement element)
{
	//Click on the element and return true if successful and false if unsuccessful.
	try 
	{
        WebElement remoteElement = waitUntilVisible(element);
		remoteElement.click();
	} catch (Exception e) {}
	return false;
}

Этот метод, похоже, не экономит время.

Есть ли другой способ сократить время выполнения.

Примечание. Мы используем WebElement вместо IOSElement, чтобы тот же код, который использовался в автоматизации рабочего стола, можно было использовать и в IOS Automation.

...