繁体   English   中英

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

[英]Not able to find element by XPATH using Appium / Python

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

我在我的 ListView 中设置了:

AutomationProperties.IsInAccessibleTree="false"

在产品名称标签中:

AutomationId="ProductName"

有趣的是,当使用 Appium 桌面 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) File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 393, in find_element_by_xpath return self.find_element(by= By.XPATH, value=xpath) File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 966, in find_element 'value': value})[' value'] 文件“/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py”,第 320 行,在执行 self.error_handler.check_response(response) 文件“/Users/joseclua”中/Library/Python/3.7/lib/python/site-packages/appium/webdriver/errorhandler.py", line 29, in check_response raise wde File "/Users/joseclua/Library/Python/3.7/lib/python/site- package/appium/webdriver/errorhandler.py”,第 24 行,在 check_response super(MobileErrorHandler, self).check_response(response) 文件“/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/ errorhandler.py”,第 242 行,在 check_response 中引发异常类(消息、屏幕、堆栈 Race) selenium.common.exceptions.NoSuchElementException: 消息:无法使用给定的搜索参数在页面上定位元素。

感谢 Suban 的洞察力,我能够点击列表元素并避免使用不推荐的 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()

点击似乎在没有睡眠的情况下失败。

谢谢苏班

appium 不推荐使用 Xpath

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

然后您可以在检查应用程序时看到cont-desc 然后你可以使用元素作为:

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

您可以使用其他方法来查找元素以及 id、UIAutomator、classname 等。

对于 id 使用 *driver.findElementById(" id ").click();

对于UIAutomator使用driver.findElementByAndroidUIAutomator("text(\\" Text \\")").click();

对于 Classname 使用driver.findElementByClassName(" Class Name ").click();

希望这可以帮助。

我通常建议在触发元素上的点击之前检查元素的可见性一段时间更安全。 像这样的东西:

    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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM