.通过 Appium 1.9.1 在 Android 8.0.0 上进行浏览器测试时,C# 中会抛出显示错误
此代码在本地(即 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;
}
最后,我尝试通过
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;
}
升级到 Appium WebDriver 4.0.0.4beta 解决了我的问题。