. Отображается в C # выдает при тестировании браузера на Android 8.0.0 через Appium 1.9.1

#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 устранило проблему для меня.