【问题标题】:How to find the element through Selenium如何通过 Selenium 找到元素
【发布时间】:2019-05-22 11:21:39
【问题描述】:

我正在使用 Selenium 和 PHP WebDriver。我正在尝试单击导航栏中的链接,该链接显示在 HTML 中,如下所示:

<li class=""><a href="javascript:;" showpage="cards"><i class="zzdi zzdi-closed-caption zzdi-hx-fw"></i> User Cards</a></li>

我正在尝试选择元素然后单击它。但是,当我尝试按如下方式使用 xpath 时:

//a[@showpage="cards"]

//*[@showpage="cards"]

我收到以下错误:

没有这样的元素:无法找到元素: {"method":"xpath","selector":"/*[@showpage="cards"]"}(会话信息: chrome=70.0.3538.110)(驱动程序信息:chromedriver=2.43.600233 (523efe95e3d68b8719b3a1c83051aa63aa6b10d),平台=Linux 4.15.0-43-generic x86_64)(警告:服务器未提供任何堆栈跟踪信息)命令持续时间或超时:24 毫秒 有关此错误的文档,请访问: http://seleniumhq.org/exceptions/no_such_element.html 构建信息: 版本:'3.4.0',修订:'未知',时间:'未知'系统信息: 主机:'ubuntu',ip:'127.0.1.1',os.name:'Linux',os.arch:'amd64', os.version: '4.15.0-43-generic', java.version: '1.8.0_191' 驱动 信息:org.openqa.selenium.chrome.ChromeDriver 功能 [{mobileEmulationEnabled=false, hasTouchScreen=false, 平台=LINUX, 接受SslCerts=假, goog:chromeOptions={debuggerAddress=localhost:43431}, acceptInsecureCerts=false,webStorageEnabled=true,browserName=chrome, 需要Screenshot=true, javascriptEnabled=true, setWindowRect=true, unexpectedAlertBehaviour=, applicationCacheEnabled=false, 可旋转=假,networkConnectionEnabled=假, 铬={铬驱动程序版本=2.43.600233 (523efe95e3d68b8719b3a1c83051aa63aa6b10d), userDataDir=/tmp/.org.chromium.Chromium.Teyqo7}, 需要HeapSnapshot=true,pageLoadStrategy=正常, databaseEnabled=false,handlesAlerts=true,版本=70.0.3538.110, browserConnectionEnabled=false,nativeEvents=true, locationContextEnabled=true, cssSelectorsEnabled=true}] 会话 ID: 367080a50b61c75a8c16a17b954a5972 *** 元素信息:{Using=xpath, value=/*[@showpage="cards"]}

任何有关如何使用 xpath 或如何使用任何其他选择方法以使我能够点击链接的帮助将不胜感激。

【问题讨论】:

    标签: php selenium xpath css-selectors webdriverwait


    【解决方案1】:

    您可能需要等待元素能够点击它:

    $driver->wait()->until(
      WebDriverExpectedCondition::elementToBeClickable(WebDriverBy::xpath('//a[@showpage="cards"]')))->click();
    

    【讨论】:

    • 在尝试执行驱动程序->findElement 时会发生此错误。脚本甚至没有到达 wait() 部分...
    • 谢谢,但恐怕没有用。命令后出现“PHP 致命错误:/var/www/html/wioc/sdk/ext/vendor/facebook/webdriver/lib/WebDriverWait.php:84 中未捕获的 Facebook\WebDriver\Exception\TimeOutException”。当我执行 getPageSource 时,我可以清楚地看到该链接出现在 HTML 中。
    • @Idan,你能检查一下链接是否位于&lt;iframe&gt;
    • 页面上没有 iframe,当我手动访问该站点时,链接可见。谢谢!
    【解决方案2】:

    要在元素上调用click(),文本为用户卡,因为该元素是启用JavaScript的元素,您需要为诱导WebDriverWait元素可点击,您可以使用以下任一解决方案:

    • 使用LINK_TEXT

      User Cards
      
    • 使用CSS_SELECTOR

      a[showpage='cards']>i.zzdi.zzdi-closed-caption.zzdi-hx-fw
      
    • 使用XPATH

      //a[@showpage='cards' and normalize-space()='User Cards']
      

    【讨论】:

      【解决方案3】:

      显然,由于窗口大小的差异(我的机器与 Selenium 使用的虚拟屏幕),导航栏没有显示,因此找不到元素。

      在做一个解决方法时发现它 - 获取所有带有“a”标签的元素,然后遍历它们。只有在单击一个额外的按钮以显示导航栏后,才能找到该元素。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-07-05
        • 1970-01-01
        • 1970-01-01
        • 2021-03-20
        • 2014-08-19
        • 1970-01-01
        • 2016-11-25
        • 1970-01-01
        相关资源
        最近更新 更多