【问题标题】:Not able to find locator in appium python无法在appium python中找到定位器
【发布时间】:2017-07-25 16:56:40
【问题描述】:

我是 appium python 客户端的新手,需要您的建议来解决我的以下问题。PFA uiautomator viewer 屏幕截图。不确定是否是这个原因:在输入电子邮件字段后,键盘打开所以没有找到密码和登录按钮 我已经下载了一个免费的示例 xxx.apk 并创建了下面的脚本来测试它:

class CareZoneAndroidTests(unittest.TestCase):
    "Class to run tests against the Care Zone app"
    def setUp(self):
        "Setup for the test"
        desired_caps = {}
        desired_caps['platformName'] = 'Android'
        desired_caps['platformVersion'] = '4.2'
        desired_caps['deviceName'] = 'Android Emulator'
        # Returns abs path relative to this file and not cwd
        desired_caps['app'] = os.path.abspath(os.path.join(os.path.dirname(__file__),'D:/Programs/myapp/CareZone_v6.6.0.0 (flagship)_apkpure.com.apk'))
        desired_caps['appPackage'] = 'com.carezone.caredroid.careapp.medications'
        desired_caps['appActivity'] = 'com.carezone.caredroid.careapp.ui.activity.LandingActivity'
        self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

    def tearDown(self):
        "Tear down the test"
        self.driver.quit()

    def test_login(self):
        "Test the Login Page launches correctly"
        self.driver.implicitly_wait(120)
        print "After WAIT----------------->>>>>>>"
        #Click on Sign in button
        element = self.driver.find_element_by_id("com.carezone.caredroid.careapp.medications:id/welcome_page_sign_toolbar_action")
        self.driver.implicitly_wait(15)
        element.click()
        element = self.driver.find_element_by_id("com.carezone.caredroid.careapp.medications:id/welcome_page_sign_mail_edit")
        self.driver.implicitly_wait(10)
        element.click()
        element.send_keys("abc@ini.com");
        element = self.driver.find_element_by_id("com.carezone.caredroid.careapp.medications:id/welcome_page_sign_password_edit")
        element.click()
        element.send_keys("abc");
        self.driver.implicitly_wait(10)
        #element = self.driver.find_element_by_id("com.carezone.caredroid.careapp.medications:id/welcome_page_sign_bton")
        #element = self.driver.find_element_by_accessibility_id('Sign In')
        element = self.driver.find_element_by_android_uiautomator('new UiSelector().text("Sign In")')
        element.click()

问题

test_login (ma​​in.CareZoneAndroidTests) 测试登录页面 正确启动...在等待之后------------------>>>>>>> 错误

================================================ ======================= 错误:test_login (ma​​in.CareZoneAndroidTests) 测试登录页面 正确启动 -------------------------------------------------- -------------------- Traceback(最近一次调用最后一次):文件 “D:\Programs\myapp\CareZoneTests.py”,第 42 行,在 test_login 中 element = self.driver.find_element_by_android_uiautomator('new UiSelector().text("Sign In")') 文件 "D:\Programs\Python275\lib\site-packages\appium\webdriver\webdriver.py", 第 133 行,在 find_element_by_android_uiautomator 返回 self.find_element(by=By.ANDROID_UIAUTOMATOR, value=uia_string) 文件 "D:\Programs\Python275\lib\site-packages\selenium\webdriver\remote\webdriver.py", 第 752 行,在 find_element 中 'value': value})['value'] 文件 "D:\Programs\Python275\lib\site-packages\selenium\webdriver\remote\webdriver.py", 第 236 行,执行中 self.error_handler.check_response(response) 文件 "D:\Programs\Python275\lib\site-packages\appium\webdriver\errorhandler.py", 第 29 行,在 check_response 中 引发 wde NoSuchElementException:消息:使用给定的搜索参数无法在页面上找到一个元素。

在下面尝试过,但由于相同的原因都失败了:

  • element = self.driver.find_element_by_id("com.carezone.caredroid.careapp.medications:id/welcome_page_sign_bton")

  • element = self.driver.find_element_by_accessibility_id('登录')

  • element = self.driver.find_element_by_android_uiautomator('new UiSelector().text("登录")')

【问题讨论】:

    标签: python selenium selenium-webdriver appium python-appium


    【解决方案1】:

    尝试通过 ID 查找元素:

    • element = self.driver.find_element_by_id('登录')

    更新:

    尝试在选择元素之前输入hidekeyboard(); 以隐藏您的键盘!

    【讨论】:

    • 谢谢@Emna。我注意到的是,当我在电子邮件字段中输入时,键盘会在模拟器中打开。当驱动程序试图找到密码字段或“登录”按钮时,由于键盘,找不到定位器。我该如何解决这个问题?附上模拟器截图
    • 看我对这个问题的回答:stackoverflow.com/questions/41977959/…
    • 谢谢@Emna。我添加了标签按钮,它解决了我的问题。
    【解决方案2】:

    下面的代码对我来说很好用:

    class CareZoneAndroidTests(unittest.TestCase):
        "Class to run tests against the Care Zone app"
        def setUp(self):
            "Setup for the test"
            desired_caps = {}
            desired_caps['platformName'] = 'Android'
            desired_caps['platformVersion'] = '4.2'
            desired_caps['deviceName'] = 'Android Emulator'
            # Returns abs path relative to this file and not cwd
            desired_caps['app'] = os.path.abspath(os.path.join(os.path.dirname(__file__),'D:/Programs/myapp/CareZone_v6.6.0.0 (flagship)_apkpure.com.apk'))
            desired_caps['appPackage'] = 'com.carezone.caredroid.careapp.medications'
            desired_caps['appActivity'] = 'com.carezone.caredroid.careapp.ui.activity.LandingActivity'
            self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
    
        def tearDown(self):
            "Tear down the test"
            self.driver.quit()
    
        def test_login(self):
            "Test the Login Page launches correctly"
            self.driver.implicitly_wait(120)
            print "Sign in Page"
            element = self.driver.find_element_by_xpath("//android.widget.TextView[@text='Have an account? Sign In']")
            self.driver.implicitly_wait(15)
            element.click()
    
            element = self.driver.find_element_by_id("com.carezone.caredroid.careapp.medications:id/welcome_page_sign_mail_edit")
    
            element.click()
            element.send_keys("ja.i@c.com");
            self.driver.implicitly_wait(3)
            self.driver.keyevent(61)
    
            element = self.driver.find_element_by_id("com.carezone.caredroid.careapp.medications:id/welcome_page_sign_password_edit")
            element.click()
            element.send_keys("ni");
            self.driver.implicitly_wait(3)
            print "Click TABS 2 times to get Sign In button-->>>>>>>"
            self.driver.keyevent(61)
            self.driver.keyevent(61)
    
    
            element = self.driver.find_element_by_id("com.carezone.caredroid.careapp.medications:id/welcome_page_sign_bton")
    
            element.click()
            self.driver.implicitly_wait(120)
            print "TEST OK"
    

    【讨论】:

      猜你喜欢
      • 2019-06-23
      • 2019-03-15
      • 1970-01-01
      • 2016-11-28
      • 2017-01-20
      • 1970-01-01
      • 2021-03-16
      • 1970-01-01
      • 2014-07-27
      相关资源
      最近更新 更多