我打算创建一个Android应用程序,执行无头登录网站,然后从后续页面抓取一些内容,同时保持登录会话.
我首先在普通的Java项目中使用了HtmlUnit,它运行得很好.但后来发现HtmlUnit与Android不兼容.
然后我通过向登录表单发送HTTP"POST"请求来尝试JSoup库.但由于JSoup不支持JavaScript,因此生成的页面不会完全加载.
然后我建议看看Selendroid,它实际上是一个android测试自动化框架.但我真正需要的是一个支持JavaScript和Android的Html解析器.我发现Selendroid很难理解哪些我甚至无法弄清楚要使用哪些依赖项.
使用Selenium WebDriver,代码将如下所示.但有人可以向我展示一个类似Selendroid的代码示例吗?
WebDriver driver = new FirefoxDriver();
driver.get("https://mail.google.com/");
driver.findElement(By.id("email")).sendKeys(myEmail);
driver.findElement(By.id("pass")).sendKeys(pass);
// Click on 'Sign In' button
driver.findElement(By.id("signIn")).click();
Run Code Online (Sandbox Code Playgroud)
并且,
在回答之前请看下面的编辑!
我正在尝试使用Selenium设置动态网络报废,但是,我似乎无法找到必要的gradle依赖项/ lib文件添加到我的项目中.我查看了Selendroid/Selenium的网站,但无法找到必要的配置信息.我假设我需要webdriver,因为我将要抓取网页数据.作为旁注,我发现在找到与Android不兼容的HtmlUnit之后使用Selendroid,并且在找不到可行的替代品之后.所有帮助表示赞赏.
(解决这个问题的其他问题仍然没有答案)
编辑:所以使用Exeon的建议,我找到了Selendroid的以下依赖项:
__PRE__
但是,在运行我的应用程序时,我收到以下错误(重复大约10次):
__PRE__
注意,我也尝试使用以下内容:
__PRE__
但我遇到了同样的错误......
我有原生的Android应用程序,使用Ionic构建,因此e2e测试是使用Protractor编写的,并且可以与混合版本的应用程序一起使用.
我想弄清楚,如果可以在Android设备(或者至少是模拟器/ avd)上对本机应用程序运行这些测试吗?
我尝试过Appium - 没有运气,它试图在设备上运行浏览器.我不需要它.
Selendroid:
java -jar path-to-selendroid.jar -app path-to.apk
它执行,但是当我启动Protractor时,它试图运行一些AndroidDriver Webview应用程序(带有Selendroid徽标)而不是我的应用程序,因此所有测试都失败了.量角器配置:
seleniumAddress: 'http://localhost:4444/wd/hub',
baseUrl: 'http://10.0.2.2:8000',
capabilities: {
browserName: 'android'
},
Run Code Online (Sandbox Code Playgroud)
有可能吗?或者我最希望的是Appium/Selendroid在设备上运行移动浏览器?
有两种方法如下: -
方法1(使用TouchActions): -
1. //Swipe Right to Left side of the Media Viewer First Page
WebElement firstPages = driver.findElement(By.id("media-list"));
TouchActions flick = new TouchActions(driver).flick(firstPages,-100,0,0);
flick.perform();
2. //perform swipe gesture
TouchActions swipe = new TouchActions(driver).flick(0, -20);
swipe.perform();
Run Code Online (Sandbox Code Playgroud)
方法2(使用javascript): -
public static void swipe(WebDriver driver) {
JavascriptExecutor js = (JavascriptExecutor) driver;
HashMap<String, Double> swipeObject = new java.util.HashMap<String, Double>();
swipeObject.put("startX", 0.95);
swipeObject.put("startY", 0.5);
swipeObject.put("endX", 0.05);
swipeObject.put("endY", 0.5);
swipeObject.put("duration", 1.8);
js.executeScript("mobile: swipe", swipeObject);
}
Run Code Online (Sandbox Code Playgroud) 我正在使用 Selenium 和 Java 在 android 上运行脚本(通过 Appium 服务器)。我看到使用 selenium 来定位吐司是不可能的
driver.findElement(By.LinkText("User not logged in")
Run Code Online (Sandbox Code Playgroud)
在 Appium
但是可以在 Selendroid 中用于捕获 toast 消息。
有没有办法在同一个脚本中同时使用 Selendroid 和 Appium?
我有一个运行Android 7.0的Nexus 5X(安全补丁级别:2016年11月5日;内部版本号:N5D91L)插入我的Mac并启用了USB调试.
ADB识别该设备(因此该解决方案不相关):
$ adb devices -l
List of devices attached
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
016e07928f462163 device usb:337641472X product:bullhead model:Nexus_5X device:bullhead
Run Code Online (Sandbox Code Playgroud)
我使用演示设置打开Selendroid服务器:
java -jar selendroid-standalone-0.17.0-with-dependencies.jar -app selendroid-test-app-0.17.0.apk
Run Code Online (Sandbox Code Playgroud)
但是当我检查时http://localhost:4444/wd/hub/status
,设备未列在supportedDevices
:
{
"value": {
"os": {
"name": "Mac OS X",
"arch": "x86_64",
"version": "10.11.6"
},
"build": {
"browserName": "selendroid",
"version": "0.17.0"
},
"supportedDevices": [],
"supportedApps": [
{
"mainActivity": "io.selendroid.testapp.HomeScreenActivity",
"appId": "io.selendroid.testapp:0.17.0",
"basePackage": …
Run Code Online (Sandbox Code Playgroud) 我需要验证像"已成功创建"的Toast消息.我尝试使用linktext.但它不起作用.任何人都可以帮我这个吗?
我想在真实设备上运行自动化测试,早些时候我在模拟器上做了这个(API> 17),但我尝试在selendroid模式下在Appium上运行的测试失败了.
以下是我为appium在selendroid模式下运行配置的功能.
Appium版本:1.0 Selendroid版本:0.10
我在端口号:6001和bootstrap端口:4001上运行appium,并且selendroid服务器在默认端口上运行:8080
private static String url = "http://localhost:"
+ System.getProperty("appium_port") + "/wd/hub";
private AppiumDriver driver;
private static DesiredCapabilities capabilities;
capabilities = new DesiredCapabilities();
File app = new File("en-android.apk");
capabilities.setCapability(CapabilityType.BROWSER_NAME, "Selendroid");
capabilities.setCapability(CapabilityType.PLATFORM, "ANDROID");
capabilities.setCapability("device", "Selendroid");
capabilities.setCapability("platformVersion", "4.1.2");
capabilities.setCapability("app", app.getAbsolutePath());
capabilities.setCapability("app-activity",
"testapp.android.gui.WelcomeActivity");
capabilities.setCapability("app-package",
"testapp.android");
driver = new AppiumDriver(new URL(url), capabilities);
Run Code Online (Sandbox Code Playgroud)
以下是Applium服务器日志.
Appium日志:
error: Android devices must be of API level 17 or higher. Please change your device to Selendroid or upgrade Android on your device.
info: Stopping logcat …
Run Code Online (Sandbox Code Playgroud) selendroid ×8
android ×5
appium ×3
java ×3
selenium ×2
angularjs ×1
automation ×1
protractor ×1
swipe ×1
touch ×1
web-scraping ×1