【问题标题】:getelements - Appium, doesn't work for several elementsgetelements - Appium,不适用于几个元素
【发布时间】:2015-02-23 19:37:56
【问题描述】:

我正在尝试获取所有元素及其值。 我有一张桌子,里面有几个项目(IOS)

表中的所有项目都具有相同的名称但不同的值,而我试图通过使用一次尝试获取元素

List<WebElement> l = driver.findElements(By.name(name)); 

然后遍历列表并拉取值

for(int i =0; i < l.length; i++){
 String val = ((MobileElement) l.get(i)).getAttribute("value");
}

我只在第一次迭代(第一个元素)时得到正确的值,所有其他的都返回空值......

如果我将代码更改为:

        //1
        List<WebElement> l = driver.findElements(driver, By.name(name));
        String val = ((MobileElement) weList.get(0)).getAttribute("value");

        //2
        l = driver.findElements(driver, By.name(name));
        val = ((MobileElement) weList.get(1)).getAttribute("value");

        //3
        l = driver.findElements(driver, By.name(name));
        val = ((MobileElement) weList.get(2)).getAttribute("value");

我得到了正确的值。

似乎每次我尝试访问它时都需要拉取该元素。 这是一个错误,还是我错过了什么?

【问题讨论】:

  • 你是否检查过是否可以转换为移动元素(通过 instanceof)?
  • 有可能,正如我所描述的,只有当我为我拉动的每个元素执行“findElements”然后我有正确的元素值时,我才能拉动元素。如果我只执行一次 findElements,然后尝试迭代,我会得到一个空值。
  • 显示迭代代码。
  • for(int i =0; i
  • 检查上面的代码并发布结果

标签: selenium-webdriver appium getelementsbyname


【解决方案1】:
for(int i =0; i < l.length; i++){    
 if(l.get(i)).instanceOf(MobileElement)){
    String val = ((MobileElement) l.get(i)).getAttribute("value"); 
    println val;//syso in Java 
} }

它起作用是因为当你使用driver.findElements(By.name(name)); 时你会得到所有匹配名字的元素。 但是当 U 使用 if(l.get(i)).instanceOf(MobileElement)) 时,U 仅对元素进行操作,这些元素是 MobileElement 的实例。如果没有它,可能会将 null 或其他奇怪的元素写入 val,然后 rest 不起作用。

【讨论】:

  • 好的,没用。再执行一次,同样的问题仍然是得到一个空值......
  • 我真的认为这是Appium的一些错误
  • 你是否等待整个页面完全加载?在脚本前 2 秒添加implicitWait。
  • 不,我没有,我会再试一次,如果我从头开始获取所有列表元素,为什么它会起作用?
  • 因为你得到了只有你想要的名称的元素。但在普通文件中,U 也得到了 U 不想要的名称 name 的元素。如果可以的话,把名字改成name2,或者更复杂的名字。或者使用其他更精确的定位器。
猜你喜欢
  • 2020-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-30
  • 1970-01-01
  • 2020-01-03
  • 1970-01-01
  • 2022-06-30
相关资源
最近更新 更多