当前位置: 首页 > 知识库问答 >
问题:

在应用程序中滑动后无法单击元素

沈飞跃
2023-03-14

我在亚马逊购物应用上测试过。我有一个问题后滑动找到一个元素。因为列表视图太长了。我需要滚动(使用刷卡API)。但是在我滑动之后,我不能再点击元素了。它没有返回错误,但应用程序没有响应。

函数ScrollToElement()用于滑动到搜索元素。我试着用触控动作轻拍,但没有希望。我试图找到一个准确的(372466)位置,但效果并不理想。提前谢谢。

public class FirstTest {
   private AppiumDriver driver;
   private   Dimension size;

   @BeforeClass
   public void Setup() throws MalformedURLException {


      String appActivityText = "com.amazon.mShop.home.HomeActivity";


      String appPackageText = "in.amazon.mShop.android.shopping";

      String fileLocation = "/system/app/";

      File classpathRoot = new File(System.getProperty("user.dir"));
      File appDir = new File(classpathRoot, "\\STC");
      File app = new File(appDir, fileLocation);
      System.out.println(app);
      DesiredCapabilities capabilities = new DesiredCapabilities();

      capabilities.setCapability("device", "Android");
      capabilities.setCapability(CapabilityType.BROWSER_NAME, "Android");

      capabilities.setCapability(CapabilityType.PLATFORM, "Android");

      capabilities.setCapability(CapabilityType.VERSION, "4.4.2");

      capabilities.setCapability("deviceName", "420373d0de528100");//420373d0de528100 01a61316598f30e6

      capabilities.setCapability("newCommandTimeout", "100");

      // capabilities.setCapability("app", "Chrome"/*app.getAbsolutePath()*/);

      capabilities.setCapability("appPackage", appPackageText);

      capabilities.setCapability("appActivity", appActivityText);

      driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
      driver.manage().timeouts().implicitlyWait(80, TimeUnit.SECONDS);

   }

   @Test
   public void Login() throws Exception {
      // Click on Shop by Deparment link
      driver.manage().timeouts().implicitlyWait(80, TimeUnit.SECONDS);
      System.out.println("Click on Shop by Deparment link");
      driver.findElement(By.id("web_home_shop_by_department_label")).click();
      Thread.sleep(1000);

      WebElement element = driver.findElement(By.name("Office Products Link"));
      ScrollToElement(driver, element);

      Thread.sleep(3000);
//      TouchAction action = new TouchAction(driver);
//      action.tap(372,466).perform();

      driver.findElement(By.name("Office Products Link")).click();

   }
   @AfterClass
   public void closeApp() {
      // driver.closeApp();

   }

public static void ScrollToElement(AppiumDriver driver, WebElement element){
      size = driver.manage().window().getSize();

      // Find swipe start and end point from screen's with and height.
      // Find starty point which is at bottom side of screen.
      int start = (int) (size.height * 0.20);
      int starty = (int) (size.height * 0.80);
      // Find endy point which is at top side of screen.
      int endy = (int) (size.height * 0.20);
      // Find horizontal point where you wants to swipe. It is in middle of
      // screen width.
      int startx = size.width / 2;

      while (true) {
         driver.swipe(startx, starty, startx, endy, 3000);
         start = start + (starty - endy);
         if (element.getLocation().getY() - start < size.height - endy) {
            break;
         }
      }
   }
}

共有1个答案

解沈义
2023-03-14

代码的问题是错误地使用了driver.findElement。让我解释一下。driver.find元素检查屏幕上显示的元素,如果找到,它将返回它。

代码的问题是在滚动功能之前执行了driver.findElement,这意味着如果元素当前不在屏幕上,测试将始终失败。

这个代码块应该可以帮助您:

public WebElement findItemWithScrollingUsingBy(By by, int interactions) {
    for (int i = 0; i < interactions; i++) {
        if (driver.findElements(by).size() == 0) {
            scrollDown();
        } else {
            return driver.findElement(by); //you can add .click() here instead of returning the element
        }
    }
    Assert.fail("Element not found");
    return null;
}

函数scrollDown()只是将刷卡的代码块转移到一个外部函数,这样就更干净了。

总结一下我的回答:

  1. 在屏幕上搜索元素-如果找到,请单击
  2. 如果未找到-执行另一个滚动操作并再次搜索元素
  3. 重复
 类似资料:
  • 报告如下: 我没有运行任何其他Postgres安装。通过运行以下命令确认了这一点: 端口5432上也没有运行的应用程序。通过跑步证实了这一点 有什么想法吗?

  • 我正试图使用chrome Driver从greytip web portal下载PDF格式的工资单。我正试图使用“driver.findelement(by.linktext(”salary“)).click();”点击链接工资。但我无法点击链接,并失败,但有以下例外。 WebDriverException:在点(198,139)不能单击元素。其他元素将收到click:...(警告:服务器没有提供

  • 我一直试图用robotium构建一个单元测试项目,但运行它总是失败,出现错误。 正如我所说的,我已经讨论了很多问题,但没有找到任何帮助我解决这个问题的东西。提前致谢

  • 问题:无法点击名为BT_SEARCH的元素 > click_button'Hae'返回:无法找到按钮"Hae"... click_link'Hae'返回:无法找到链接"Hae"... 查找(:xpath,“//输入[@name='BT\u SEARCH']”)。单击似乎找不到元素。 我无法修改源,也没有可用的id或类标签。此外,该页面使用ASP,我认为这是导致问题的原因。

  • 在我们的应用程序中,当我将鼠标放在菜单项上时,将出现下拉菜单项。在这里我想通过点击它来选择一个项目。主菜单:管理子菜单:管理频道,管理用户在selenium webdriver中,我尝试通过给出xpath,linktext,partial link文本直接点击管理频道。