无法使用Appium / Python通过XPATH查找元素

时间:2018-12-05 11:21:06

标签: python appium python-appium

我正在自动执行一个流程,该流程包括从产品列表(即Xamarin ListView的产品列表)中点击产品名称,进入产品详细信息页面。

我已经在ListView中设置了

AutomationProperties.IsInAccessibleTree="false"

在产品名称标签中:

AutomationId="ProductName"

有趣的是,当使用Appium Desktop UI检查工具时,我可以看到XPATH,如果我记录了对其的轻敲,那么它实际上可以工作,并且我得到了以下脚本:

MobileElement el1 = (MobileElement) driver.findElementByXPath("(//XCUIElementTypeStaticText[@name=\"ProductName\"])[1]");
el1.click();

为此,我知道XPATH存在并且对Appium可见。它可以在检查工具中使用。

现在,当我将其转换为Python时,出现了问题:

el1 = self.driver.find_element_by_xpath("(//XCUIElementTypeStaticText[@name=\"ProductName\"])[1]")

我收到此错误消息:

el = self.driver.find_element_by_xpath(element_query)         在find_element_by_xpath中的第393行中的文件“ /usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py”           返回self.find_element(by = By.XPATH,value = xpath)         在find_element中,文件“ /usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py”,行966           'value':value})['value']         执行中的文件“ /usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py”,第320行           self.error_handler.check_response(响应)         文件“ /Users/joseclua/Library/Python/3.7/lib/python/site-packages/appium/webdriver/errorhandler.py”,第29行,在check_response中           提高WDE         文件“ /Users/joseclua/Library/Python/3.7/lib/python/site-packages/appium/webdriver/errorhandler.py”,第24行,在check_response中           超级(MobileErrorHandler,self).check_response(响应)         文件“ /usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py”,第242行,在check_response中           引发exception_class(消息,屏幕,堆栈跟踪)       selenium.common.exceptions.NoSuchElementException:消息:使用给定的搜索参数无法在页面上找到元素。

4 个答案:

答案 0 :(得分:1)

由于Suban的洞察力,我能够点击list元素,并且避免使用不推荐使用的XPath。

这是我现在在iOS上使用的代码。我仍然需要在Android中进行测试。

def list_item_tap(self, el_name):
    print("list_item_tap {0}", el_name)
    li = self.driver.find_elements_by_accessibility_id(el_name)
    print("list items: {0}", len(li))
    if len(li) > 0:
        el = li[0]
        time.sleep(2)
        el.click()

如果没有睡眠,单击似乎失败。

谢谢苏安

答案 1 :(得分:0)

  

不建议在appium中使用Xpath

您可以使用cont-desc,id,resource-id来实现自动化。由于您正在使用xamarin项目,因此可以在项目中添加自动化代码。

然后,您可以在检查应用程序时看到 cont-desc 。然后,您可以将element用作:

el = self.driver.find_elements_by_accessibility_id('ProductName');

答案 2 :(得分:0)

您可以使用其他方法来查找元素,例如id,UIAutomator,类名等。

对于ID,请使用* driver.findElementById(“ id ”)。click();

对于UIAutomator,请使用 driver.findElementByAndroidUIAutomator(“ text(\” Text \“)”)。click();

对于类名,使用 driver.findElementByClassName(“ 类名”)。click();

希望这会有所帮助。

答案 3 :(得分:0)

我通常建议更安全的方法是,在触发单击元素之前的某个时间检查元素的可见性。像这样:

    elem_to_find = WebDriverWait(
        driver, 5).until(
            EC.visibility_of_element_located(
                ('xpath or id or class of the element, considering xpath in this case', MobileBy.XPATH)))
    elem_to_find.click()