#c# #android #appium
#c# #Android #appium
Вопрос:
Этот код отлично работает с Chrome локально (т. Е. На ПК)…
IWebElement widget = Driver.FindElements(widgetLocator).FirstOrDefault(x => x.Displayed);
…но выдает следующее при использовании с Appium 1.9.1 для общения с Android 8.0.0:
openQA.Selenium.WebDriverException: «При обработке команды произошла неизвестная ошибка на стороне сервера. Исходная ошибка: неизвестная ошибка: аргумент для isShown должен иметь тип Element (информация о сеансе: chrome = 73.0.3683.90) (Информация о драйвере: chromedriver = 2.44.609538
Браузер запускается на Android, переходит на страницу нашего сайта, на которую он должен, и в большинстве случаев работает нормально. Но отображаемый всегда выдает вышеуказанное без дальнейших объяснений. Кто-нибудь видел это?
Я пытался использовать ExecuteJavaScript()
для проверки видимости сложный способ, но OpenQA.Selenium ExecuteJavaScript()
возвращает пустоту, а не bool
как на других платформах. Я пробовал, включил, но это не делает того, что я искал. Я позаимствовал IsElementVisible()
функцию коллеги, как показано ниже, но она также выдает:
public static bool IsElementVisible(IWebDriver driver, By locator)
{
WebDriverWait wait = new WebDriverWait(driver,System.TimeSpan.FromMinutes(1));
WebDriverWait w = new WebDriverWait(driver, TimeSpan.FromMinutes(1));
try
{
wait.Until(ExpectedConditions.VisibilityOfAllElementsLocatedBy(locator));
}
catch (Exception ex)
{
return false;
}
return true;
}
И, наконец, я попытался FindElement
использовать элемент, который я ищу CssSelector
, ClassName
и все остальное, что я мог придумать, но безуспешно (они не могут надежно найти только «видимую» версию элемента).
В качестве фона, что я пытаюсь сделать здесь, это «портировать» некоторые существующие тестовые сценарии, которые работают с Chrome на ПК через WebDriver, для тестирования того же веб-сайта на Android через Appium. Этот устаревший код использует . Отображается во многих местах, и если я не смогу найти надежную альтернативу в мобильной ситуации, у нас возникнет некоторая проблема.
Комментарии:
1. @DaryHutchings кажется, что вы передаете только локатор, но не передаете тип локатора — это xpath или id или имя класса, подобное этому
Ответ №1:
Пожалуйста, найдите приведенный ниже код, который я отредактировал, как вы можете видеть в своем исключении, в нем говорится: «Аргумент для isShown должен иметь тип Element», это означает, какой тип элемента вы передаете, пожалуйста, сообщите нам, сработало ли это решение
Исключение:
OpenQA.Selenium.WebDriverException: 'An unknown server-side error occurred while processing the command. Original error: unknown error: Argument to isShown must be of type Element (Session info: chrome=73.0.3683.90) (Driver info: chromedriver=2.44.609538
Отредактированный код:
public static bool IsElementVisible(IWebDriver driver, String locator)
{
WebDriverWait wait = new WebDriverWait(driver,System.TimeSpan.FromMinutes(1));
WebDriverWait w = new WebDriverWait(driver, TimeSpan.FromMinutes(1));
try
{
wait.Until(ExpectedConditions.VisibilityOfAllElementsLocatedBy(By.xpath(locator)));
}
catch (Exception ex)
{
ex.printStackTrace();
return false;
}
return true;
}
Ответ №2:
Обновление до бета-версии Appium WebDriver 4.0.0.4 устранило проблему для меня.