问题
A project I'm on is developing a web app at the same time as an ios app (for the same thing) and I'm hoping to be able to use existing Selenium tests, but we're having trouble with selectors. Is there a selector type or attribute name that can be used for both Selenium Webdriver and Appium ios, so that I can just set a variable to either browser or app and they run and work on both. Nobody on this project has used Appium before, so we are lacking a lot in knowledge.
I tried using IDs and found that ios doesn't work with them, changed to names and found that names have been removed from appium. If possible we'd prefer to use a selector that will be the same in the browser as it is in the app.
Thanks
回答1:
You can create one object repository file which contains the locators for both WebApp and iOS app. Then you have to follow the below process
- Create
WebDriver
andAppiumDriver
instances - Use the relevant drivers for locating the elements in WebApp as well as iOS app. We can use both the drivers within a test case.
Please note that, the way WebDriver
and AppiumDriver
identifies the elements will be different. For example, in WebDriver
if an element is identified by using ID
then similarly in AppiumDriver
an element can be identified by using the findElementByAccessibilityId
.
Even though AppiumDriver
uses the same logic which WebDriver
uses, the method names will differ. Please find the link for all the methods used by AppiumDriver
Hope this helps.
回答2:
How about creating multiple object repositories and loading the relevant object repository based on the underlying platform?
1. So you need to store locators of both the platforms in separate repositories
2. Create a Interface / wrapper which would load relevant repository based on the platform on which tests are going to run.
回答3:
Didn't quite get the question but for Appium You have separated annotations for bot iOS and Android platform similar as for web via:
@FindBy(id="buttonOK")
private WebElement buttonPopUp;
Here is example for Android and iOS
@iOSFindBy(id = "lets_do_it")
@AndroidFindBy(id = "message_popup_dismiss_button")
@WithTimeout(unit = TimeUnit.SECONDS, time = 1)
private MobileElement buttonPopUp;
So in same pageObject you have covered both platforms.
Mobile platform can work together, but recommendation is not to mix web and mobile, but mobile platforms can play together just fine, and is recommended so can share same code functionality.
来源:https://stackoverflow.com/questions/38055234/using-selenium-webdriver-selectors-in-appium-ios