gpt4 book ai didi

flutter - 我们如何将选择器/id 添加到 Flutter 小部件,以便可以从 Appium 访问它们

转载 作者:IT王子 更新时间:2023-10-29 06:57:36 27 4
gpt4 key购买 nike

我们想使用 Appium/Selenium 对 Flutter 应用程序进行自动化测试。在 Selenium 中查看时,某些元素没有选择器。在 Android 中,我们只需将 id 添加到每个元素上,它们就会出现在 Appium 中。我们如何在 Flutter 环境中做到这一点?

最佳答案

我找到了一种带有变通方法的方法,它可以让您合理自然地在 Flutter Web 中使用 Selenium(尽管无法使用 headless 浏览器)

  1. 您需要找到窗口 x y 坐标与屏幕 x y 坐标的偏移量。我在另一个线程中发现了这个想法pageCallibrator.html:
<script>
window.coordinates = [];
document.addEventListener('click', function() {
window.coordinates = [event.pageX, event.pageY];
});
</script>

然后在运行测试之前在 Selenium setup 中(Java 示例)

    int windowScreenOffsetX = 0;
int windowScreenOffsetY = 0;

void callibrateXY(WebDriver driver) {
driver.get("http://localhost:8080/pageCallibrator.html"); //TODO adjust host
Dimension size = driver.manage().window().getSize();

int x = size.width / 2;
int y = size.height / 2;
clickMouseAtXY(x, y);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
}
List<Object> coordinates = (List<Object>) ((JavascriptExecutor) driver).executeScript("return window.coordinates;");
windowScreenOffsetX = x - (int) (long) coordinates.get(0);
windowScreenOffsetY = y - (int) (long) coordinates.get(1);
}

现在在 Selenium 中按下 Flutter 按钮

            WebElement continueToBankButtonElement = findElementWithText(driver, "My button text");
clickMouseAtElement(continueToBankButtonElement);

你在哪里定义

import org.openqa.selenium.*

Robot robot = new Robot();
Driver driver = new ChromeDriver(options); // TODO handler exceptions and options in a method


WebElement findElementWithText(WebDriver driver, String text) {
return driver.findElement(containsTextLocator(text));
}

By containsTextLocator(String text) {
return By.xpath("//*[contains(text(), '" + text + "')]");
}

void clickMouseAtElement(WebElement element) {
clickMouseAtXY(element.getLocation().getX() + element.getSize().width / 2, element.getLocation().getY() + element.getSize().height / 2);
}

void clickMouseAtXY(int x, int y) {
moveMouse(x, y);
robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
}

/**
* @param x
* @param y
*/
protected void moveMouse(int x, int y) {
robot.mouseMove(x + windowScreenOffsetX, y + windowScreenOffsetY); // Offset of page from screen
}

关于flutter - 我们如何将选择器/id 添加到 Flutter 小部件,以便可以从 Appium 访问它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55499515/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com