开发者问题收集

.通过 Appium 1.9.1 在 Android 8.0.0 上进行浏览器测试时,C# 中会抛出显示错误

2019-04-16
281

此代码在本地(即 PC 上)的 Chrome 上运行良好...

IWebElement widget = Driver.FindElements(widgetLocator).FirstOrDefault(x => x.Displayed);

...但在 Appium 1.9.1 Android 8.0.0 通信时会抛出以下错误:

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

浏览器确实在 Android 上启动,导航到我们网站内它应该导航的页面,并且在大多数情况下运行良好。但是,Displayed 总是抛出上述错误而没有进一步解释。有人见过这种情况吗?

我尝试使用 ExecuteJavaScript() 以困难的方式检查可见性,但在 OpenQA.Selenium ExecuteJavaScript() 返回 void ,而不是其他平台上的 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;
}

最后,我尝试通过 CssSelectorClassName 和我能想到的任何其他方法对正在寻找的元素执行 FindElement ,但没有成功(它们无法可靠地仅找到元素的“可见”版本)。

作为背景介绍,我在这里尝试做的是“移植”一些现有的测试脚本,这些脚本通过 WebDriver 在 PC 上针对 Chrome 运行,以通过 Appium 在 Android 上测试同一个网站。此遗留代码使用。显示在很多地方,如果我在移动情况下找不到可靠的替代方案,我们就会遇到一些问题。

2个回答

请找到我编辑过的以下代码 正如您在异常中看到的,它说“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;
}
akshay patil
2019-04-17

升级到 Appium WebDriver 4.0.0.4beta 解决了我的问题。

DarylHutchings
2019-04-17