如何通过硒找到元素

时间:2018-12-22 08:12:51

标签: php selenium xpath css-selectors webdriverwait

我正在将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   (523efee95e3d68b8719b3a1c83051aa63aa6b10d),平台= 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',操作系统名称:'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,platform = LINUX,   acceptSslCerts = false,   goog:chromeOptions = {debuggerAddress = localhost:43431},   acceptInsecureCerts = false,webStorageEnabled = true,browserName = chrome,   TakesScreenshot = true,javascriptEnabled = true,setWindowRect = true,   excellentAlertBehaviour =,applicationCacheEnabled = false,   rotatable = false,networkConnectionEnabled = false,   chrome = {chromedriverVersion = 2.43.600233   (523efee95e3d68b8719b3a1c83051aa63aa6b10d),   userDataDir = / tmp / .org.chromium.Chromium.Teyqo7},   takeHeapSnapshot = true,pageLoadStrategy = normal,   databaseEnabled = false,handlesAlerts = true,版本= 70.0.3538.110,   browserConnectionEnabled = false,nativeEvents = true,   locationContextEnabled = true,cssSelectorsEnabled = true}]会话ID:   367080a50b61c75a8c16a17b954a5972   ***元素信息:{Using = xpath,value = / * [@ showpage =“ cards”]}

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

3 个答案:

答案 0 :(得分:1)

您可能需要等待元素才能单击它:

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

答案 1 :(得分:1)

要在元素上使用文本作为用户卡的元素调用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']
    

答案 2 :(得分:0)

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

在解决方法时发现了问题-使用“ a”标签获取所有元素,然后进行遍历。只有在单击额外的按钮以显示导航栏之后,才能找到该元素。