Python 返回pyhton appium中的self.find_元素(by=by.ID,value=ID_)和异常错误

Python 返回pyhton appium中的self.find_元素(by=by.ID,value=ID_)和异常错误,python,appium,Python,Appium,我想用python编写自动化测试。我正在使用android studio模拟器和appium。我想为计算器编写自动化程序,但在某个地方出现了一个错误 我添加了time.sleep(),但问题仍然存在 from appium import webdriver import time caps = {"deviceName": "emulator-5554", "platformName": "android", "appPackage": "com.android.calculator2",

我想用python编写自动化测试。我正在使用android studio模拟器和appium。我想为计算器编写自动化程序,但在某个地方出现了一个错误

我添加了time.sleep(),但问题仍然存在

from appium import webdriver

import time

caps = {"deviceName": "emulator-5554", "platformName": "android", "appPackage": "com.android.calculator2",
        "appActivity": ".Calculator", "noReset": True}

driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", caps)

el2 = driver.find_element_by_id("com.android.calculator2:id/digit_8")

el2.click()

time.sleep(2)

el3 = driver.find_element_by_accessibility_id("times")

el3.click()

time.sleep(2)

el4 = driver.find_element_by_id("com.android.calculator2:id/digit_3")

el4.click()

time.sleep(2)

el5 = driver.find_element_by_accessibility_id("equals")

el5.click()

time.sleep(2)

el6 = driver.find_element_by_id("com.android.calculator2:id/formula")

el6.click()

time.sleep(2)

driver.quit()
我正在等待android模拟器打开并计算

我有这个错误行

> C:\python37\dersler1\venv\Scripts\python.exe
> C:/python37/dersler1/hs.py Traceback (most recent call last):   File
> "C:/python37/dersler1/hs.py", line 12, in <module>
>     el2 = driver.find_element_by_id("com.android.calculator2:id/digit_8")   File
> "C:\python37\dersler1\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py",
> line 360, in find_element_by_id
>     return self.find_element(by=By.ID, value=id_)   File "C:\python37\dersler1\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py",
> line 978, in find_element
>     'value': value})['value']   File "C:\python37\dersler1\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py",
> line 321, in execute
>     self.error_handler.check_response(response)   File "C:\python37\dersler1\venv\lib\site-packages\appium\webdriver\errorhandler.py",
> line 29, in check_response
>     raise wde   File "C:\python37\dersler1\venv\lib\site-packages\appium\webdriver\errorhandler.py",
> line 24, in check_response
>     super(MobileErrorHandler, self).check_response(response)   File "C:\python37\dersler1\venv\lib\site-packages\selenium\webdriver\remote\errorhandler.py",
> line 242, in check_response
>     raise exception_class(message, screen, stacktrace) selenium.common.exceptions.InvalidSelectorException: Message: Locator
> Strategy 'css selector' is not supported for this session
>C:\python37\dersler1\venv\Scripts\python.exe
>C:/python37/dersler1/hs.py回溯(最后一次调用):文件
>“C:/python37/dersler1/hs.py”,第12行,in
>el2=driver.find_element_by_id(“com.android.calculator2:id/digit_8”)文件
>“C:\python37\dersler1\venv\lib\site packages\selenium\webdriver\remote\webdriver.py”,
>第360行,按id查找元素
>返回self.find_元素(by=by.ID,value=ID_)文件“C:\python37\dersler1\venv\lib\site packages\selenium\webdriver\remote\webdriver.py”,
>第978行,在find_元素中
>'value':value})['value']文件“C:\python37\dersler1\venv\lib\site packages\selenium\webdriver\remote\webdriver.py”,
>执行中的第321行
>self.error\u handler.check\u响应(响应)文件“C:\python37\dersler1\venv\lib\site packages\appium\webdriver\errorhandler.py”,
>第29行,在check_响应中
>提出wde文件“C:\python37\dersler1\venv\lib\site packages\appium\webdriver\errorhandler.py”,
>第24行,在check_响应中
>super(MobileErrorHandler,self).检查\u响应(response)文件“C:\python37\dersler1\venv\lib\site packages\selenium\webdriver\remote\errorhandler.py”,
>第242行,在check_响应中
>引发异常类(消息、屏幕、堆栈跟踪)selenium.common.exceptions.InvalidSelectorException:message:Locator
>此会话不支持策略“css选择器”

@adem我认为您的
Appium Python客户端
版本已经过时,并且与当前的
Appium服务器
版本不兼容。 使用命令sudo pip install-Appium-Python-Client==0.34更新您的
Appium-Python客户端

我以前也遇到过同样的问题。正如我所看到的,您没有在脚本中的任何地方使用css\u选择器,但它仍然显示css\u选择器的错误。当您签入
Appium日志时
,您会对它有更多的了解

对我来说,当我将Appium-Python客户端的版本更新为0.34时,问题就解决了

import os
from appium import webdriver
import time

PATH = lambda p: os.path.abspath(
    os.path.join(os.path.dirname(__file__), p))
desired_caps = {
    "deviceName": "emulator-5554",
    "platformName": "android",
    "appPackage": "com.android.calculator2",
    "appActivity": ".Calculator",
    "noReset": True
}
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)

while True:
    try:
        el1 = driver.find_element_by_xpath('/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.support.v4.view.ViewPager/android.widget.LinearLayout/android.view.ViewGroup[1]/android.widget.Button[6]')
        el1.click()
        time.sleep(1)
        el2 = driver.find_element_by_accessibility_id("times")
        el2.click()
        time.sleep(1)
        el3 = driver.find_element_by_xpath( 
'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.support.v4.view.ViewPager/android.widget.LinearLayout/android.view.ViewGroup[1]/android.widget.Button[9]')
        el3.click()
        time.sleep(1)
        el4 = driver.find_element_by_accessibility_id("equals")
        el4.click()
        time.sleep(1)
    except ValueError:
        print(" ERROR BRO  ")
        pass
    break
一些ID正在工作,其他ID则不工作。我使用xpath而不是id和 误差有所改善。我认为ID的数量在不断变化。 Xpath起了作用


可能重复感谢Sachhya提供此信息。我认为我的版本是最新的。id似乎有问题。Xpath帮助我解决了这个问题。我现在通常更喜欢appium中的“xpath”。因为有时候可访问性id或by id不能给出完整的结果。你对这个主题怎么看?我不这么认为,如果资源id存在,那么它必须是可访问的。还有一件事,你会发现与css_uu选择器相关的错误,它在脚本中的任何地方都不存在。我知道使用
xpath
是一个选项,但这并不意味着您不能通过id访问它。我只是想确认您的appium服务器和appium Python客户端的版本。我的appium Python客户端版本=>0.47 appium服务器=>1.13.0