当前位置: 首页 > 文档资料 > Appium 中文文档 >

自动化 Web 测试

优质
小牛编辑
133浏览
2023-12-01

如果你有兴趣在 iOS 系统上的 Safari 浏览器或者 Android 系统上的 Chrome 浏览器进行网页自动化的话 ,Appium可以帮助你。你只要正常地写 WebDriver 测试,通过特别的设置,可以把 Appium 当成 Selenium 服务来运行。

模拟器上的移动端Safari浏览器

首先,确定你的 Safari 开发者模式开启,移动调试端口打开。

如果你需要用模拟器或真实设备,你必须在用 Appium 之前打开 Safari 浏览器。

然后,想在移动端 Safari 上运行你的测试,就需要按如下设置 desired capabilities:

DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "iOS");
capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "7.1");
capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, "Safari");
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "iPhone Simulator");
{
  'platformName': 'iOS',
  'platformVersion': '7.1',
  'browserName': 'Safari',
  'deviceName': 'iPhone Simulator'
}
{
  platformName: 'iOS'
  , platformVersion: '7.1'
  , browserName: 'Safari'
  , deviceName: 'iPhone Simulator'
}
public static $browsers = array(
array(
    'desiredCapabilities' => array(
        'platformName' => 'iOS',
        'platformVersion' => '7.1',
        'browserName' => 'Safari',
        'deviceName' => 'iPhone Simulator'
    )
)
);

iOS 真机上的移动端 Safari

在iOS 9.3及以下(pre-XCUITest)版本系统,我们借助 SafariLauncher 应用在移动端Safari运行测试。 这是因为Safari是苹果公司的应用,Instruments 不能在真机上拉起 Safari。SafariLuncher 可以帮助打开 Safari 浏览器,浏览器一旦打开,Remote Debugger 会通过 ios-webkit-debug-proxy 自动连接。在 ios-webkit-debug-proxy 运行时, 必须在你的iOS设备测试前,信任这台设备

指导如何安装和运行 ios-webkit-debugger-proxy ,可以查阅 iOS WebKit debug proxy

安装

在真实上运行测试前,你需要:

  • 安装好 ios-webkit-debug-proxy,运行并在 27753 接口开启监听。(查阅 hybrid 文档 作为指导)
  • 在 iOS 设备上开启 web inspector(设置>safari>高级)

运行你的测试

在 safari 运行你的测试,只需简单地设置 "browserName""Safari"

Java示例

// java
//setup the web driver and launch the webview app.
DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
desiredCapabilities.setCapability(MobileCapabilityType.BROWSER_NAME, "Safari");
URL url = new URL("http://127.0.0.1:4723/wd/hub");
AppiumDriver driver = new AppiumDriver(url, desiredCapabilities);

// 浏览网页和定位页面元素取得id。
driver.get("http://saucelabs.com/test/guinea-pig");
WebElement div = driver.findElement(By.id("i_am_an_id"));
Assert.assertEquals("I am a div", div.getText()); //check the text retrieved matches expected value
driver.findElement(By.id("comments")).sendKeys("My comment"); //populate the comments field by id.

//关闭浏览器
driver.quit();

Python Example

# 建立web driver,开启浏览器app。
capabilities = { 'browserName': 'Safari' }
driver = webdriver.Remote('http://localhost:4723/wd/hub', capabilities)

# 浏览网页和定位页面元素取得id。
driver.get('http://saucelabs.com/test/guinea-pig');
div = driver.find_element_by_id('i_am_an_id')
# 检查文本是否匹配值
assertEqual('I am a div', div.text)

#  通过元素id填值。
driver.find_element_by_id('comments').send_keys('My comment')

# 关闭浏览器。
driver.quit()
class ContextTests extends PHPUnit_Extensions_AppiumTestCase
{
public static $browsers = array(
    array(
        'desiredCapabilities' => array(
            'platformName' => 'iOS',
            'platformVersion' => '7.1',
            'browserName' => 'Safari',
            'deviceName' => 'iPhone Simulator'
        )
    )
);

public function testThings()
{
    $this->get('http://saucelabs.com/test/guinea-pig');

    $div = $this->byId('i_am_an_id');
    $this->assertEquals('I am a div', $div->text());

    $this->byId('comments')->sendKeys('My comment');
}
}

在模拟器和真机上的移动端 Chrome

前提设置:

  • 确保 Chrome (应用包名 com.android.chrome) 在设备或者模拟器上安装好了。不编译 Chromium,在 x86 版本的模拟器上安装 Chrome 已经不可能了。所以你需要运行一个 ARM 版本的模拟器,然后从真机上复制一个 Chrome APK 到模拟器上。
  • 在特定版本的 Chrome 上进行自动化,需要安装和配置不同版本的 Chromedriver,更多信息参考文档

然后,使用如下设置,在你的Chrome下运行你的测试:

DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "4.4");
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator");
capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, "Chrome");
{
  'platformName': 'Android',
  'platformVersion': '4.4',
  'deviceName': 'Android Emulator',
  'browserName': 'Chrome'
}
{
  platformName: 'Android'
  , platformVersion: '4.4'
  , deviceName: 'Android Emulator'
  , browserName: 'Chrome'
};
public static $browsers = array(
array(
    'desiredCapabilities' => array(
        'platformName' => 'Android',
        'platformVersion' => '4.4',
        'browserName' => 'Chrome',
        'deviceName' => 'Android Emulator'
    )
)
);

注意:在 4.4+ 版本的设备上,你也可以将 browserName 设置为'Browser' 在内建的浏览器上运行自动化。设置浏览器为'Chromium'是在所有设备可以运行的。在所有设备上,你可以将 browserName 设置为 'Chromium' 来对Chromium的某个版本进行自动化。

Chromedriver 的障碍排除

截止 Chrome Version 33,设备不在需要被 root。在这之前,设备需要被 root,因为 ChromeDriver 设置启动Chrome的命令行参数需要在 /data/local 目录的写入权限。

如果在 Chrome 低于 33 版本上测试,请确保 adb shell 有设备读取/写入 /data/local 权限。

$ adb shell su -c chmod 777 /data/local

更多chroomedriver文档参见(https://sites.google.com/a/chromium.org/chromedriver/getting-started/getting-started---android)