.通过Appium 1.9.1在Android 8.0.0上进行浏览器测试时以C#throws显示

.通过Appium 1.9.1在Android 8.0.0上进行浏览器测试时以C#throws显示,c#,android,appium,C#,Android,Appium,此代码在本地(即在PC上)对Chrome运行良好 …但在与Appium 1.9.1对抗时抛出以下内容以与Android 8.0.0对话: OpenQA.Selenium.WebDriverException:“处理该命令时发生未知的服务器端错误。原始错误:未知错误:isShown的参数必须是Element类型 (会话信息:chrome=73.0.3683.90) (驾驶员信息:chromedriver=2.44.609538 浏览器确实是在Android上启动的,可以导航到我们网站中应该使用的页

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

…但在与Appium 1.9.1对抗时抛出以下内容以与Android 8.0.0对话:

OpenQA.Selenium.WebDriverException:“处理该命令时发生未知的服务器端错误。原始错误:未知错误:isShown的参数必须是Element类型 (会话信息:chrome=73.0.3683.90) (驾驶员信息:chromedriver=2.44.609538

浏览器确实是在Android上启动的,可以导航到我们网站中应该使用的页面,并且在大多数情况下都可以正常工作。但是,Display总是抛出上面的内容,没有进一步解释。有人看到过吗

我曾尝试使用
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;
}
最后,我尝试通过
CssSelector
ClassName
和我能想到的任何其他方法,在我正在寻找的元素上
FindElement
,但没有成功(他们无法可靠地只找到元素的“可见”版本)


作为背景,我在这里要做的是“端口”一些现有的测试脚本通过WebDriver在PC上与Chrome对抗,通过Appium在Android上测试同一个网站。此遗留代码使用。在许多地方显示,如果我在移动环境中找不到可靠的替代方案,我们将遇到一些问题。

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

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

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

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

@DaryHutchings似乎只传递定位器,而不传递定位器类型是xpath还是id或类名之类的that@DaryHutchings您似乎只通过定位器,而没有通过定位器类型是xpath、id还是类名