用个迭代把所有 webview 里面的 k, j 都打印出来,看看哪个 webview 可以找到。
确定页面已经出现了"login_email"的元素?
以前碰过,如果页面没有出现要点击的元素,报错和妳的是一样的
An unknown server-side error occurred while processing the command. (WARNING: The server did not provide any stacktrace information)
不过妳睡的时间够长的,20 秒。
#4 楼 @lihuazhang
估计实用性不大,塞 sikuli 的话,像评分这种窗口应该处理不了,因为不知道什么时候出现,即无法预计窗口出现的时间。
弄了
有时间,分享下上面说的。
#4 楼 @lihuazhang
唉,只会皮毛中的皮毛,差得远啊。
#2 楼 @lihuazhang
我暂时用 sikuli 搞的,appium java 代码塞进 sikuli 的 api
有没 iOS 方面的? 像点掉评分那个窗口的,Appium 抓不到的窗口
#3 楼 @ericlovetest
scroll 是 javascriptexecutor 的
#2 楼 @umbrella1978
谢谢提示。
问题已解决,js 的脚本不能单纯地用 webdriver 方法处理。
如下:
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.document.getElementById('login_button').click()");
#2 楼 @umbrella1978
是的,是通过 js 绑定事件来做业务动作,刚才找了开发的,看了下 js 源码,这个绑定的 js 动作是 click 事件。
可以用 scroll
滑不了, intrusments 的 bug,apple 不修。
#3 楼 @kuroky
有,MobileBy 方法返回的就是 By,可以把 appiumdriver 封装的 accessibilityid 方法拆出来。
java MobileBy 源码:
package io.appium.java_client;
import org.openqa.selenium.By;
import org.openqa.selenium.SearchContext;
import org.openqa.selenium.WebElement;
import java.io.Serializable;
import java.util.List;
/**
* Created by jonahss on 4/10/14.
*/
public abstract class MobileBy extends By {
public static By IosUIAutomation(final String uiautomationText) {
if (uiautomationText == null) {
throw new IllegalArgumentException("Must supply an iOS UIAutomation string");
}
return new ByIosUIAutomation(uiautomationText);
}
public static By AndroidUIAutomator(final String uiautomatorText) {
if (uiautomatorText == null) {
throw new IllegalArgumentException("Must supply an Android UIAutomator string");
}
return new ByAndroidUIAutomator(uiautomatorText);
}
public static By AccessibilityId(final String id) {
if (id == null) {
throw new IllegalArgumentException("Must supply a uiautomationText");
}
return new ByAccessibilityId(id);
}
public static class ByIosUIAutomation extends By implements Serializable {
private final String automationText;
public ByIosUIAutomation(String uiautomationText) {
automationText = uiautomationText;
}
@Override
public List<WebElement> findElements(SearchContext context) {
return ((FindsByIosUIAutomation) context).findElementsByIosUIAutomation(automationText);
}
@Override
public WebElement findElement(SearchContext context) {
return ((FindsByIosUIAutomation) context).findElementByIosUIAutomation(automationText);
}
@Override
public String toString() {
return "By.IosUIAutomation: " + automationText;
}
}
public static class ByAndroidUIAutomator extends By implements Serializable {
private final String automatorText;
public ByAndroidUIAutomator(String uiautomatorText) {
automatorText = uiautomatorText;
}
@Override
public List<WebElement> findElements(SearchContext context) {
return ((FindsByAndroidUIAutomator) context).findElementsByAndroidUIAutomator(automatorText);
}
@Override
public WebElement findElement(SearchContext context) {
return ((FindsByAndroidUIAutomator) context).findElementByAndroidUIAutomator(automatorText);
}
@Override
public String toString() { return "By.AndroidUIAutomator: " + automatorText; }
}
public static class ByAccessibilityId extends By implements Serializable {
private final String id;
public ByAccessibilityId(String id) {
this.id = id;
}
@Override
public List<WebElement> findElements(SearchContext context) {
return ((FindsByAccessibilityId) context).findElementsByAccessibilityId(id);
}
@Override
public WebElement findElement(SearchContext context) {
return ((FindsByAccessibilityId) context).findElementByAccessibilityId(id);
}
@Override
public String toString() {
return "By.AccessibilityId: " + id;
}
}
}
apply 中使用 By 可能可以解决,不要直接使用 WebDriver/AppiumDriver