107 lines
3.6 KiB
Java
107 lines
3.6 KiB
Java
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
package org.mozilla.gecko.tests;
|
|
|
|
import static org.mozilla.gecko.tests.helpers.AssertionHelper.fFail;
|
|
|
|
import org.mozilla.gecko.Actions;
|
|
import org.mozilla.gecko.Element;
|
|
import org.mozilla.gecko.R;
|
|
|
|
import org.mozilla.gecko.EventDispatcher;
|
|
import org.mozilla.gecko.util.GeckoEventListener;
|
|
|
|
import org.json.JSONObject;
|
|
|
|
import com.jayway.android.robotium.solo.Condition;
|
|
|
|
public class testFindInPage extends JavascriptTest implements GeckoEventListener {
|
|
private static final int WAIT_FOR_CONDITION_MS = 3000;
|
|
|
|
protected Element next, close;
|
|
|
|
public testFindInPage() {
|
|
super("testFindInPage.js");
|
|
}
|
|
|
|
@Override
|
|
public void handleMessage(String event, final JSONObject message) {
|
|
if (event.equals("Test:FindInPage")) {
|
|
try {
|
|
final String text = message.getString("text");
|
|
final int nrOfMatches = Integer.parseInt(message.getString("nrOfMatches"));
|
|
findText(text, nrOfMatches);
|
|
} catch (Exception e) {
|
|
fFail("Can't extract find query from JSON");
|
|
}
|
|
}
|
|
|
|
if (event.equals("Test:CloseFindInPage")) {
|
|
try {
|
|
close.click();
|
|
} catch (Exception e) {
|
|
fFail("FindInPage prompt not opened");
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void setUp() throws Exception {
|
|
super.setUp();
|
|
|
|
EventDispatcher.getInstance().registerGeckoThreadListener(this,
|
|
"Test:FindInPage",
|
|
"Test:CloseFindInPage");
|
|
}
|
|
|
|
@Override
|
|
public void tearDown() throws Exception {
|
|
super.tearDown();
|
|
|
|
EventDispatcher.getInstance().unregisterGeckoThreadListener(this,
|
|
"Test:FindInPage",
|
|
"Test:CloseFindInPage");
|
|
}
|
|
|
|
public void findText(String text, int nrOfMatches){
|
|
selectMenuItem(mStringHelper.FIND_IN_PAGE_LABEL);
|
|
close = mDriver.findElement(getActivity(), R.id.find_close);
|
|
boolean success = waitForCondition ( new Condition() {
|
|
@Override
|
|
public boolean isSatisfied() {
|
|
next = mDriver.findElement(getActivity(), R.id.find_next);
|
|
if (next != null) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
}, WAIT_FOR_CONDITION_MS);
|
|
mAsserter.ok(success, "Looking for the next search match button in the Find in Page UI", "Found the next match button");
|
|
|
|
// TODO: Find a better way to wait and then enter the text
|
|
// Without the sleep this seems to work but the actions are not updated in the UI
|
|
mSolo.sleep(500);
|
|
|
|
mActions.sendKeys(text);
|
|
mActions.sendSpecialKey(Actions.SpecialKey.ENTER);
|
|
|
|
// Advance a few matches to scroll the page
|
|
for (int i=1;i < nrOfMatches;i++) {
|
|
success = waitForCondition ( new Condition() {
|
|
@Override
|
|
public boolean isSatisfied() {
|
|
if (next.click()) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
}, WAIT_FOR_CONDITION_MS);
|
|
mSolo.sleep(500); // TODO: Find a better way to wait here because waitForCondition is not enough
|
|
mAsserter.ok(success, "Checking if the next button was clicked", "button was clicked");
|
|
}
|
|
}
|
|
} |