擅长:python、mysql、java
<p>我也在使用Appium和Python为Android和iOS自动化应用程序,我遇到了同样的问题,应用程序是相同的,但定位器当然不同。在</p>
<p>为了重用相同的方法,但使用不同的定位器,我提出了这个解决方案,例如:</p>
<pre><code>class Header(Page):
def __init__(self, driver):
super(Header, self).__init__(driver)
self.os = str(self.driver.desired_capabilities['platformName']).lower()
# Android
login_button_android = (MobileBy.ID, 'com.matchbook.client:id/loginButton')
#iOS
login_button_ios = (MobileBy.ACCESSIBILITY_ID, 'LOGIN')
def open_login_page()
self.driver.find_element(*getattr(self, 'login_button_' + self.os)).click()
</code></pre>
<p>当您现在从外部类调用<code>open_login_page</code>时,它将知道在检索操作系统时要使用哪个定位器(Android或iOS)
<code>self.os =str(self.driver.desired_capabilities['platformName']).lower()</code>在<code>__init__</code>方法中。在</p>
<p>执行时<code>'login_button_' + self.os</code>将变成<code>'login_button_android'</code>或{<cd6>}。在</p>
<p>这样,任何数量的操作系统版本都只需要1个方法,唯一的区别是定位器变量的名称不同,除了结尾的后缀应该是<code>_android</code>或<code>_ios</code>之外,它们需要有相同的名称。在</p>